[C++] C++ を始めるためのデフォルトのパラメーター


1. デフォルトパラメータ

1. C/C++関数の空パラメータの違い

  • C 言語では、関数がパラメータ リストを指定しない場合、デフォルトで任意の数のパラメータを受け取ることができます。
#include<stdio.h>
void Test()
{
    
    
}
int main()
{
    
    
    Test(10);
    Test(10, "hello");
    return 0;
}

ここに画像の説明を挿入

  • C++ では、パラメーターの型が厳密に検出されるため、関数にパラメーター リストがない場合、関数はデフォルトで void になり、パラメーターを受け取りません。
#include<iostream>
using namespace std;

void Test()
{
    
    

}
int main()
{
    
    
    Test(10);
    Test(10, "hello");
    return 0;
}

ここに画像の説明を挿入

2. デフォルトパラメータの概念

デフォルトパラメータは、関数の宣言または定義時に関数のパラメータのデフォルト値を指定します。関数を呼び出すとき、実パラメータが指定されていない場合は仮パラメータのデフォルト値が採用され、それ以外の場合は指定された実パラメータが使用されます。

#include<iostream>
using namespace std;
void Func(int a = 0)//给参数a指定一个缺省值
{
    
    
	cout << a << endl;
}
int main()
{
    
    
	Func(); // 没有传参时,使用参数的默认值,输出为0
	Func(10); // 传参时,使用指定的实参,输出为10
	return 0;
}

ここに画像の説明を挿入

3. デフォルトパラメータの分類

  • すべてのデフォルトパラメータ
void Func(int a = 10, int b = 20, int c = 30)
{
    
    
   cout<<"a = "<<a<<endl;
   cout<<"b = "<<b<<endl;
   cout<<"c = "<<c<<endl;
}
  • 準デフォルトパラメータ
void Func(int a, int b = 10, int c = 20)//此时a必须要接受到参数
{
    
    
   cout<<"a = "<<a<<endl;
   cout<<"b = "<<b<<endl;
   cout<<"c = "<<c<<endl;
}

注: 準デフォルトのパラメータは右から左にデフォルト設定する必要があり、デフォルトを分離することはできません。

void Func(int a=10, int b , int c = 20)//报错
{
    
    
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}

ここに画像の説明を挿入

2. 注意すべき事項

  1. 準デフォルトのパラメータは、右から左に順番に指定する必要があり、交互に指定することはできません。
#include<iostream>
using namespace std;
void Func(int a=10, int b=20 , int c = 30)
{
    
    
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "c = " << c << endl;
}
int main()
{
    
    
	Func(1, 2, 3);
	Func(1, 2);
	Func(1, ,3);//报错
	return 0;
}
  1. デフォルトのパラメータは関数の宣言と定義に同時に使用できず、デフォルト値は宣言で指定する必要があります。
#include<iostream>
using namespace std;
void Func(int a = 10);
int main()
{
    
    
	
	Func();
	return 0;
}
void Func(int a = 10)
{
    
    
	cout << "a = " << a << endl;
}

ここに画像の説明を挿入

  1. デフォルト値は定数またはグローバル変数である必要があります
  2. C言語はサポートしていません(コンパイラはサポートしていません)

おすすめ

転載: blog.csdn.net/qq_65207641/article/details/128850465