1. 返回const引用的函数为右值,可以防止func() = 1这样的操作;
2. 有关函数重载的一个知识点
void func(double *a); // 唯一原型
float p = 1.0;
func(p) // 可以匹配
void func(double *a);
void func(int *a);
func(p) // 不能匹配
3. 原型和原型的引用视为同一特征标;原型和const原型视为不同特征标;
4. 返回类型不同时特征标也应当不同;
5. 使用模板定义的函数在最终的程序中会根据实际的调用情况再生成一个新的函数,类似于又手工定义了一遍;(实例化)
6. 有关具体化
template<class T>
void func(T a);
template<> voidfunc<SomeType1>(SomeType1 a) // 显式具体化,不使用模板,定义新的函数
int main(void) {
template void func<SomeType2>(SomeType2 a); // 显式实例化,利用模板创建了SomeType版本的实例
SomeType2 a;
func<SomeType2>(a); // 显式实例化
func(a); // 隐式实例化}
7. decltype(func()) z 不会调用func函数
decltype((xx)) z 定义为指向xx类型的引用
decltype(x+y) z 定义z为x+y的类型
decltype(expression) 内部是一个表达式
8. 后置返回类型 autofunc(T1 x, T2 y) -> decltype(T1, T2)