函数返回不能是数组或者函数
在块中创建,到达快末尾销毁的是自动变量(如形参)
形参的顶层const会被忽略。定义 f(int)和f(const int)重复定义,形参相同
使用引用而非常量引用会极大限制传入类型,常量引用只需要能转换成相同类型即可,非常量则必须相同。如f(const string&)可以传入“a”,而f(string&)不行
main(int,char**) 使用时argc【0】保存程序的名字,正式的参数从1开始
可变形参3种方式:initializer_list,可变参数末班,省略符
initializer_list中的变量永远是const,初始化方式initializer_list a{“a”,“b”}
返回一个数组的指针 int (*f(int a))[10] ,其中 (*f(int a))表示 返回值可以解引用
或者 auto f(int a)-》int(*)【10】 尾指返回类型
或者 decltype,但如果参数是数组,返回的参数是数组,而不是指针
调用重载函数有三个结果:最佳匹配,无匹配,二义性匹配
给定的作用域只能赋予一次默认实参,先申明了 string screen(int,int=5),就不能 string screen(int,int=6),但可以tring screen(int=4,int=5)
局部变量不能作为默认实参,但其他能转换为形参类型的都可以
constexpr返回的不一定是常量
定义了一些全局变量
cout << __FILE__ << endl << __FUNCTION__ << endl << __LINE__ << endl << __DATE__ << endl << __TIME__ << endl;
函数匹配,先找到候选函数(名字和可见),在可行函数(参数类型和数量相等),寻找最佳匹配(每个实参的匹配都不劣于其他可行函数或者至少有一个实参的匹配由于其他 函数)
匹配优先级:1.实参和形参相同,实参从数组或函数转为对应指针,实参添加或去除顶层const
2.通过const转换实现
3.类型提升
4.算术类型或者指针转换
5、类类型转换
函数名可以当指针使用,指针无需解引用可直接调用