4
我剛剛發現,當它涉及到模板的代碼用g ++ 3.4.2編譯,除非m的作用()不叫:這段代碼合法的C++
template <typename T>
class C
{
T e;
public:
C(): e(0) {};
void m()
{
e = 0;
};
};
現在,人們可以創建和使用實例
C<const int> c;
直到c.m()
不被調用有沒有編譯錯誤,但這是合法的嗎?
廣義正確的,但更準確地說,它應該談論的方法被實例化,而不是調用。除了調用它,帶一個成員指針也會這樣做;並且如果一個方法是虛擬的,它是實現定義的,無論實例化是否延遲。 – 2009-11-26 23:05:02
至少依賴於模板類型的任何內容。有一些與非依賴性錯誤混淆。例如,VC++將在方法,只要你不調用它接受甚至是完整的胡言亂語(這裏'無感;'),但其他的編譯器不會接受,即使你不要實例在所有的模板(其可能更正確)。 – UncleBens 2009-11-26 23:09:15
任何人都知道標準的意圖是什麼?至少在我的應用程序的當前級別上,我不需要例如專門爲const版本的模板編寫代碼(爲了清晰起見,我可能將來會這樣做)。但是這是一個例子嗎? – doc 2009-11-27 00:50:14