1. 函数的返回类型不能是数组类型或者函数类型,但可以是指向数组或函数的指针。
2. 局部静态对象static.
3. 指针形参
4. 传引用参数:可以改变实参的值。若无须改变引用形参的值,声明为常量引用。
5. 形参的顶层const被忽略掉。void fun(const int i)与void fun(int i)是一样的。
6. 尽量使用常量引用。int fun(string &s)不能把const对象、字面值传给普通引用,只能将fun函数作用于string对象上,fun(“hadoop”)错误。应该定义为int fun(const string &s)
7. 数组形参:void fun(const int *),void fun(const int[])是等价的。
8. int main(int argc , char *argv[]):argv是个数组,它的元素是指向C风格字符串的指针,其第一个元素指向程序的名字或者空字符串。argc表示数组中字符串的数量。
9. initializer_list:如果函数的实参数量未知但全部实参的类型相同,可以使用它,定义在同名的头文件中。void fun(inittalizer_list<string> il) ,fun({“a”,”s”}).
10. 不能返回局部对象的引用或指针。因为函数终止时局部变量的引用将指向不再有效的内存区域。
11.调用一个返回引用的函数得到左值,其它返回类型得到右值。
12.函数可以返回vector<>类型。
13.返回数组指针,方法一:使用类型别名:typedef int arr[10]; arr* fun(int c);方法二: int (*fun(int i))[10];方法三:使用decltype:int odd[]={};decltype(odd) *fun(){};
14.尾置返回类型:auto fun(int i) -> int(*)[10]
15.函数重载:函数名相同但是形参列表不同。
16.内联函数,在返回类型前加inline,用于规模小、流程直接、频繁调用。
17.constexpr函数:用于常量表达式的函数,函数的返回类型及所有的形参类型都是字面值类型,若实参是常量表达式则返回类型也是常量表达式。若用非常量表达式调用此函数,则返回值是一个非常量表达式。
18.内联函数和constexpr函数通常通常定义在头文件中。
19.函数指针:bool (*fun)(const string & ,string e);
20.返回函数的指针:方法一:使用类型别名,using PF =int(*)(int *, int); PF fi(int);方法二: int (*fi(int)) (int* , int);方法三:尾置返回类型:auto fi(int) -> int (*)(int * , int);方法四:int fi(int *);decltype(fi) * fun();