局部静态对象:第一次经过对象定义语句时初始化,之后不再执行初始化语句,直到程序终止对象才会被销毁。
给函数传递参数时尽量使用引用避免拷贝,同时如果函数无须改变引用形参的值,最好将其声明为常量引用,这很重要,能够避免很多错误。
顶层const和底层const。顶层const是指针本身是const不可改变值,底层const是指针指向的对象是const不可修改指向对象的值。
函数返回局部对象的引用和局部对象的指针都是错误的。函数执行完毕后,局部对象已经不存在了。
C++11规定,函数可以返回花括号包围的值的列表。此次返回的列表用来对表示函数返回的临时量进行初始化。如:
vector<string> process() { return {"sfdf", "sfdfds"}; }
这是合法的,常量会调用常量,非常量会调用非常量。
void fcn(const int &i) {} void fcn(int &i) {} void fcn(const int *i) {} void fcn(int *i) {}
默认实参的初始值:局部变量不能作为默认实参。
在函数的返回类型前加上关键字inline可以变为内联函数,要放在定义处而不是声明处。内联函数放于头文件中。
重载函数调用时的规则:先确定能够匹配的,再找最佳匹配(每个实参的匹配都不劣于其他,至少有一个优于其他)。
函数指针:
bool (*pf) (const string &, const string &);//未初始化
pf = lengthCompare;
pf = &lengthCompare;//等价
void a(bool (*pf) (const string &, const string &));//函数指针形参
返回指向函数的指针:223页。