函数

1、由于变量初始化时会忽略顶层const,函数参数也是如此,因此,void f(int i)和void f(const int i),是两个相同的函数,并不构成重载。

2、把函数不会改变的形参定义成(普通的)引用是一种比较常见的错误,这么做带给函数的调用者一种误导,即函数可以修改它的实参的值。此外,使用引用而非常量引用也会极大的限制函数所能接受的实参类型,我们不能把cosnt引用、字面值或者需要类型转换的对象传递给普通的引用形参。

 3、数组作为参数,数组不能被拷贝,数组会转换成指针,一下三个函数是等价的:void print(const int *);void print(const int[]);void print(const int[10]);这三个函数的参数都是const int*,其中第三个函数的参数表示期望数组的大小是10,但实际不一定是10,使用参数时只会检查该参数的类型是不是const int*。

4、当参数类型相同,数量不确定时,可使用initializer_list类型作为函数参数,initializer_list中的元素永远是常量,我们无法改变它们的值。如果想向形参initializer_list中传递一个值的序列,则必须把序列放在一对花括号内。

5、省略符形参应该仅仅用于C和C++通用的类型。特别应该注意的是,大多数类类型的对象在传递给省略符形参时都无法正确拷贝。

6、返回一个值的方式和初始化一个变量或形参的方式完全一样:返回的值用于初始化调用点的一个临时量,该临时量就是函数调用的结果。

7、不要返回局部对象的引用或指针。函数完成后,它所占用的存储控件也随之被释放掉。因此,函数终止意味着局部变量的引用将指向不再有效的内存区域。

8、调用一个返回引用的函数返回左值,其他类型返回右值。

9、如果想定义一个返回数组指针的函数,那么需要在函数名字后面的形参列表后面加上数组的维度,形式如下所示:Type (*function(parameter_list))[dimention];。

10、可以使用尾置返回类型制定函数的返回类型,形如:auto function(parameter_list)->int (*)[10];。

11、main函数不能重载不能递归。

12、同名的局部变量会隐藏外层的变量,函数也一样,局部声明的函数不会与外层同名函数发生重载,只会隐藏外层同名函数,在C++语言中名字查找先于类型检查。

posted @ 2022-12-09 17:02  许卡文迪  阅读(24)  评论(0编辑  收藏  举报