目录
1.缺省参数
很多人第一次见缺省这个词,不知道什么意思,百度百科上缺省的意思如下:缺省(quē shěng),又译“默认”。即系统默认状态,意思与“默认”相同。缺省值也叫默认值。
顾名思义缺省参数就是指有默认值的参数。看代码:
#include<iostream>
using namespace std;
//这里a和b就是缺省参数,当调用函数fuc没有给实参时,a和b就默认是10和20
int func(int a = 10, int b = 20)
{
return a + b;
}
int main()
{
int a = fuc(1, 2);//a == 3
int b = fuc();//b == 30
int c = fuc(1);//c == 1+20即21
return 0;
}
注意:
1.函数中的缺省参数只能在末尾,不能在无缺省参数的前面
//缺省参数a,b不能在非缺省参数c前面,函数报错
int func(int a = 10, int b = 20,int c,int d = 40)
{
return a + b+c+d;
}
2.当带缺省参数的函数定义和声明分离时,只能由定义带缺省参数或声明带缺省参数,不可同时带缺省
//报错,重定义缺省参数
//test.h
int func(int a = 10, int b = 20);
//test.cpp
int func(int a = 10, int b = 20)
{
return a + b;
}
//-----------------------------------------------------------
//下面两种都是对的,只有一处带缺省
//test.h
int func(int a, int b);
//test.cpp
int func(int a = 10, int b = 20)
{
return a + b;
}
//test.h
int func(int a = 10, int b = 20);
//test.cpp
int fuc(int a, int b)
{
return a + b;
}
3.缺省值必须是常量或者全局变量
int c = 5;
int func(int a = c, int b = 20)
{
return a + b;
}
int main()
{
int a = func();//a == 25
return 0;
}
2.函数重载
C++允许在同一个作用域中定义多个函数名相同但是功能不同的函数,这些同名的函数可能参数不同(参数个数,参数类型),也可能返回类型不同。
那既然函数名相同,我想用其中的某个函数,该怎么区分是哪个函数呢?
这时候编译器就会根据你给函数传的参数的类型或数量来判断你想用哪个函数,所以传参时不能让编译器无法识别要调用的是哪个函数。举个例子:
int func(int a = 10, int b = 20)
{
return a + b;
}
void func(char a = 1, char b = 2)
{
cout << a << endl << b << endl;
}
int main()
{
func('1', '1');//传参是char类型,进入的第二个func函数,无返回值
func(1, 1);//传参是int类型,进入的第一个func函数,返回值为2
//如果两个参数中一个传int,一个传char,编译器报错,
//找不到参数为(int,char)的func函数
func(1, '1');
//编译器报错,无法区分调用的是哪个函数
func();
return 0;
}
3.内联函数
要讲这个,先得讲讲C语言的宏函数。
int MAX(int x,int y)
{
if(x>y)
return x;
return y;
)
这个函数写成宏函数如下
#define MAX(a,b) ((a)>(b)?(a):(b))
是不是代码可读性不高,而且不能调试。所以C++引入内联函数的的概念,关键字:inline
内联函数和普通函数的写法几乎一致,只不过在函数名前面要加上inline关键字
inline int MAX(int x,int y)
{
if(x>y)
return x;
return y;
)
注意:
1.内联函数的定义和声明不能分离,因为inline在预处理时被展开了,没有函数地址,链接时会找不到。
2.inline只是给编译器一个建议,最终这个函数会不会展开取决于编译器自己的决定,比如一个内联函数内容特别长,编译器一般都不会展开,会当成正常的函数使用。
以上就是全部内容,如有错误请一定指出!