C++回顾——函数重载与默认参数

一、函数重载
函数重载:可以对不同的函数使用同样的名字,只要求函数的参数不同。编译器会修饰这些名字、范围和参数来产生内部名以供它和连接器使用。C++代码在编译时会根据参数列表对函数进行重命名,例如void fun(int a, int b)会被重命名为_fun_int_int(不同的编译器有不同的重命名方式),当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议(Overload Resolution)。所以,函数重载仅仅是语法层面的,本质上它们还是不同的函数,占用不同的内存,入口地址也不一样。

函数的重载的规则:
1)函数名称必须相同;
2)参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
3)函数的返回类型可以相同也可以不相同(仅仅返回类型不同不足以成为函数的重载)。
重载发生在一个作用范围内(类、struct、union、命名空间等)。

二、默认参数
默认参数是在函数声明时就已给定的一个值,如果在调用函数时没有指定这一参数的值,编译器就会自动地插上这个值。
在使用默认参数时必须记住两条规则:1)只有参数列表的后部参数才是可默认的(不可以在一个默认参数后面又跟一个非默认的参数);2)一旦在一个函数调用中开始使用默认参数,那么这个参数后面的所有参数都必须是默认的。
默认参数只能放在函数声明中,通常在一个头文件中。函数声明时,参数可以没有标识符(占位符参数),其目的在于以后可以修改函数定义而不需要修改所有的函数调用(如果定义一个没有使用的参数,编译器会给出一个警告)。
一个默认参数应该是一个在一般情况下放在这个位置的值,这个值出现的可能性比较大,客户程序员可以忽略它或只在需要改变默认值时才去用它。

猜你喜欢

转载自blog.csdn.net/zlanbl085321/article/details/80911393
今日推荐