如果我在非模板類中有一個成員函數模板並且想在類之外定義它 - 是否必須使用「內聯」?成員函數模板需要「內聯」
例子:
class A
{
template <class D>
void someMethod(D param);
}
template <class D>
/* inline needed here? */ void A::someMethod(D param)
{
}
節標準的3.2.5說函數模板不擾定義規則下摔倒。在這方面,成員函數模板是一個函數模板嗎?
編輯:鏈接器不抱怨沒有內聯 - 但仍然 - 是否有效C++ 03?
編輯:
我已經學會爲止:海灣合作委員會(和assumingly其他的編譯器,太)出口隱含的模板實例爲弱符號,這意味着沒有衝突期間鏈接時會發生,如果他們在多個實例翻譯單位。由於弱符號不是標準的一部分 - 該標準以某種方式隱含地要求模板實例化以這種方式行爲,並且我能期待與其他標準符合編譯器/鏈接器組合的相同行爲嗎?
由於直列基本上忽略了優化,但允許在不同的翻譯單位這隱含轉化爲出口這些功能弱符號的功能的多個定義。這是否意味着聲明一個模板爲inline是多餘的?
是的,編譯器不會抱怨。然而,並非所有滿足編譯器的都是有效的C++;)我們在這裏進行了討論,沒有人確定。 –
編譯器無法投訴,因爲它一次只能看到一個翻譯單元,並且在兩個翻譯單元中定義了某些內容時會發生ODR違例。 – MSalters
'inline'是否有任何語法意義?我一直認爲這只是編譯器的一個優化建議。 – Philipp