1.关键字inline必须与函数定义体放在一起才能使函数真正内联,仅把inline放在函数声明的前面不起任何作用。inline是一种用于实现的关键字,而不是用于声明的关键字。高质量C++程序设计风格的一个基本原则:声明与定义不能混为一谈,用户没有必要也不应该知道函数是否需要内联。
2.const引用可以初始化不同类型的对象或者初始化为右值(如字面值常量)。同样的初始化对于非const是非法的。即将引用绑定到不同类型时,会发生:
eg:
double dval = 3.14;
const int &ri = dval;
编译器讲这些代码转换为一下形式的编码:
int temp = dval;
const int &ri = temp;
3.在类本来的作用域内部,可以使用类模版的非限定名。例如默认构造函数和复制构造函数的声明中,copy是copy<type>的缩写表示。实质上,编译器推断,当我们引用类的名字时,引用的是同一版本。编译器不会为类中的其他模版的模版形参进行这样的推断,因此声明伙伴类的指针时,必须指定类型形参。
4.接受类类型形参(类类型指针或者引用形参)的函数(包括重载符),以及与类本身定义在同一命名空间中的函数(包括重载符),在用类类型对象(类类型指针或者引用形参)作为实参的时候是可见的。
eg: std::string s;
getline(std::cin, s);
当编译器看到getline函数的使用getline(std::cin,s)的时候,它在当前作用域、包含调用的作用域以及定义cin的类型和string类型的命名空间中查找匹配的函数。因此它在命名空间std中查找并找到了由string类型定义的getline函数。