是否O.K.在其主體外部定義類模板的虛函數?虛函數不能被內聯,但要避免在編譯單元多重定義它們應標明inline
(假設模板頭文件將包含在多個源文件)。另一方面,編譯器可以自由忽略inline
,所以這看起來有效。舉例來說,下面的代碼是正確的:模板定義之外的類主體
template <typename T>
class C
{
public:
virtual void f(T val);
};
template <typename T>
inline
void C<T>::f(T val)
{
//definition
}
?
順便說一句,gcc(3.4.2)允許在定義函數f(T val)
之前省略inline
,但不能在常規類的類似函數之前。這僅僅是gcc的行爲嗎?
您使用gcc * 3.4.2 *? – jpalecek 2012-04-18 14:19:58
@jpalecek在這個特定的例子中,是的。 – doc 2012-04-18 14:22:03
@doc - 虛函數*可以聲明爲「inline」(但這裏不需要)。編譯器在函數可以內聯的時候有點難以確定。 – 2012-04-18 15:58:24