C++中 缺省参数

1.概念:缺省参数是函数在声明或者定义时为函数指定一个默认值。在调用该函数时,如果没有指定实参则使用其默认值,否则使用指定的实参。

#include <iostream>
using namespace std;
void Print(int num)
{
    
    
cout<<num<<endl;
}
int main()
{
    
    
Print();//没有传参数,使用默认值
Print(10);//进行了传参,使用指定的实参
return 0;
}

2.缺省参数的分类
(1)全缺省参数
顾名思义是在函数声明或定义时,其函数的所有参数都有一个默认值
函数传参规则:在传递参数时,是从左到右依次传递

#include <iostream>
using namespace std;
void Print(int left=1,int right=2)
{
    
    
cout<<"left="<<left<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
Print();//没有传递实参,使用默认值
Print(10);//10传递给第一个参数,后面一个参数使用默认值
Print(10,20);//使用指定实参,没有使用默认值
return 0;
}

(2)半缺省参数
(2.1)概念:顾名思义是函数的部分参数带有默认值

#include<iostream>
using namespace std;
void Print(int left,int mid=2,int right=3)
{
    
    
cout<<"left="<<left<<endl;
cout<<"mid="<<mid<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
Print(1);
Print(1,4);
return 0;
}

(2.2)半缺省参数规则

#include <iostream>
using namespace std;
//第一个参数不带默认值,后面两个带默认值,代码可以通过编译
void Print(int left,int mid=2,int right=3)
{
    
    
cout<<"left="<<left<<endl;
cout<<"mid="<<mid<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
return 0;
}
#include <iostream>
using namespace std;
//第一个参数带默认值,第二个参数不带默认值,第三个参数带默认值,代码不可以通过编译,编译报错
void Print(int left=1,int mid,int right=3)
{
    
    
cout<<"left="<<left<<endl;
cout<<"mid="<<mid<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
return 0;
}

在这里插入图片描述

#include <iostream>
using namespace std;
//第一个参数带默认值,第二个参数带默认值,第三个参数不带默认值,代码不可以通过编译,编译报错
void Print(int left=1,int mid=2,int right)
{
    
    
cout<<"left="<<left<<endl;
cout<<"mid="<<mid<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
return 0;
}

在这里插入图片描述

#include <iostream>
using namespace std;
//第一个参数不带默认值,第二个参数不带默认值,第三个参数带默认值,代码可以通过编译
void Print(int left,int mid,int right=3)
{
    
    
cout<<"left="<<left<<endl;
cout<<"mid="<<mid<<endl;
cout<<"right="<<right<<endl;
}
int main()
{
    
    
return 0;
}

结论:带缺省参数只能在不带缺省参数的右边(半缺省参数只能从右往左依次给出,不能有间隔)

3.注意
(1)缺省参数不能在函数声明和定义中同时出现,若同时出现,当其默认值给的不同时,编译器不知道该使用哪个缺省值,建议在函数声名中给出。
(2)缺省值必须是常量或者全局变量

#include <iostream>
#include <Windows.h>
using namespace std;
int a=1;//为全局变量时
void Print(int num=a)
{
    
    
cout<<"num="<<num<<endl;
}
int main()
{
    
    
Print();
system("pause");
return 0;
}
#include <iostream>
#include <Windows.h>
using namespace std;
//缺省值为局部变量时,会编译报错
void Test()
{
    
    
int a=2;
}
void Print(int num=a)
{
    
    
cout<<"num="<<num<<endl;
}
int main()
{
    
    
Print();
system("pause");
return 0;
}

在这里插入图片描述

(3)C语言不支持

猜你喜欢

转载自blog.csdn.net/weixin_43807876/article/details/109200063