請看下面的測試代碼:選擇具有指針參數
template<class T> struct Wrap {};
template<typename T> inline
void fun (T *&Int) // **choice 1**
{}
template<typename T> inline
void fun (Wrap<T> *&Int) // **choice 2**
{}
int main()
{
int i = 6;
fun((char*&)(i)); // **call 1**
fun((Wrap<char>*&)(i)); // **call 2**
}
當我運行在Linux G ++這段代碼,它的工作原理按預期。當使用char * &調用fun()時,它會直接調用choice 1的函數。然而,當我們調用fun()與包裝< char> * &並且它調用了選項2時,我感興趣。儘管選項1和2對於第二次調用都有效,編譯器仍然設法選擇一些更好的競爭者 - > choice 2(因爲它存在)。
問題:是否保證,對於任何其他C++編譯器都會保留相同的行爲?如果不是,那麼是否有其他選擇使其具有確定性?
'inline'在模板函數中幾乎沒有用處。這不是必須的,因爲它們是(非專用的)模板,因此不會導致鏈接器錯誤,編譯器比我們更好地確定何時內聯和何時不內...並可能完全忽略您的請求。 – 2011-03-28 09:12:43