C++的那些坑—函数的参数和重载
2013-04-05 14:22
155 查看
1、函数的参数为引用
需要注意的问题,变量的引用就是变量别名。注意非const和const,且传引用参数时不能进行类型转换。Page 204int incr(int &val,string &s1,const string &s2) { cout << s1 << s2; return ++val; } int main() { short v1 = 0; const int v2 = 42; int v3; string s1; const string s2; v3 = incr(v1,s1,s2); //error,v1此时不能类型转换为int v3 = incr(v2,s1,s2); //error,v2 不是const型 v3 = incr(v3,"hello world",s2); //error,不能将const型传给s1 v3 = incr(v3,s1,"hello world"); //ok return 0; }
2、数组作为函数的参数
数组作为函数参数,在函数中只会被看成是指针。函数只检查实参是不是指针、指针的类型和数组元素的类型是否匹配,而不会检查数组的长度。如果形参是数组的引用,编译器不会讲数组实参转化为指针而是数组的引用本身,数组的大小成为实参和形参类型的一部分。Page 207void print_values1(int *ia){} void print_values2(int ia[]){} void print_values3(int ia[10]){} void print_values4(int (&ia)[10]){} int main() { int i=0,j[2] = {0,1},k[10]={0}; print_values2(&i); //ok,可能出现run_time error,因为在函数内部可能访问越界 print_values3(j); //ok,同上,print_value1\2\3 三个函数等价 print_values4(j); //error,j不是10 ints的数组 print_values4(k); //ok return 0; }
3、重载和局部申明
如果局部的声明一个函数,则该函数将屏蔽而不是重载在外层作用域中声明的同名函数。每一个版本的重载函数都应该在同一个作用域中声明。Page 230void print(const string &){} void print(double){} //重载 void fooBar(int val) { void print(int); //屏蔽了外部声明的两个重载的print函数 print("value:"); //error, print(const string&)被屏蔽了 print(val); //ok print(3.14); //调用print(int) }
4、重载的步骤
首先找到名字相同的为候选函数,然后参数匹配(包括隐式类型转换后)的为可行函数,再寻找最佳匹配,即参数精确匹配优于其他的函数。如果最佳匹配函数不是唯一的那么产生二义性,编译错误。Page 232void f(double ,int){} void f(int ,double){} int main() { f(3.14,3); //ok,两个函数都可行,但是第二个为最佳匹配 f(3.14,3.14); //error,两个函数的匹配程度相同,最佳匹配不唯一 return 0; }
5、重载和const
仅当形参时引用或指针时,形参是否为const才有影响。void f1(int&){} void f1(const int&){} //ok void f2(int *){} void f2(int const*){} //ok void f2(int *const){} //error,重定义,const是修饰指针本身,指针本身是以副本的形式传递
相关文章推荐
- VS2010 C++ 学习笔记(一) 引用 函数参数默认值 函数重载 内联inline
- C++ 引用、内联函数、函数默认参数、函数重载
- c++中的命名空间、函数重载、缺省参数
- 就让你歧义!(C++的默认参数函数与无参数函数的重载)
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
- C++离航篇——函数默认参数、函数重载、内敛函数
- <C++>c++程序有函数重载,能不能设置默认参数值?
- [C++学习笔记]--内联函数、函数重载、函数defualt参数
- c++第一节之函数重载与缺省参数
- C++ 缺省参数 重载 C++编译器的函数名修饰规则
- C/C++的区别(默认值、内联函数、函数重载、const、引用、参数、返回值)
- 北大 C++ 1.7 内联函数、函数重载和函数缺省参数
- 【C++提高】函数重载的参数匹配问题
- C++那些细节--函数的默认参数
- C++中 函数的升级---内联函数、默认参数、占位参数、函数重载、C与C++结合
- C++获取Lua全局变量和执行Lua多参数多返回值函数
- C/C++中函数参数传之指针形参
- C++中函数的重载和函数指针排序大全
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- 【C/C++】高亮C++中函数的重写——函数名相同?参数列表相同?返回值相同?