注意,下面说的“声明”指的是非定义处的声明,别跟我扯什么“所有的定义都是声明”什么的。
1. inline
inline可以放在声明处,也可以放在定义处,也可以两个地方都放。但是inline是属于实现部分的内容,不应该出现在接口处,即类的使用者从使用的角度不需要知道是不是inline的。所以,编程规范是inline关键字应该只出现在定义处,而不应该在声明处,所以class body里不应该出现“inline”。这一点在C++ FAQ(http://www.parashift.com/c++-faq/)[9] Inline functions中有提到。BTW,所有在class body中实现的函数都是隐含inline的,因而在class body里实现的短函数也不需要显式的写上“inline”。所以可以得出结论:任何情况下都不应该在class body里看到“inline”这个关键字(注释除外)。新手也许会问,如果我在a.cc里定义了一个inline函数fun(),在b.cc里forward declare并使用了fun。按照编程规范,b.cc中对fun()的declaration处不标inline,那b.cc中使用fun()时,编译器怎么知道该把fun()内联展开呢?答案是inline函数不能像普通函数那样在另一文件中forward declare后调用,使用inline函数的唯一方法就是include(直接或间接)其定义,所以在定义处标inline就够了。
定义类的时候,如