3
我只是一個簡單的問題,檢查這個代碼,請:模板專業化和普通的舊功能
template < typename A >
void foo(A a)
{ cout<<"1\n"; };
template< >
void foo<float>(float a)
{ cout<<"2\n"; }
void foo(float a)
{ cout<<"3\n"; }
int main()
{
foo<float>(1.0f);
}
編譯使用g ++ 4.7.2作品,當然,但什麼是我不明白就是爲什麼輸出「2」而不是「3」。
據我記得,一個非模板函數應該總是偏向一個模板,所以爲什麼叫做專用foo?
謝謝
您需要調用'foo(1.0f)'來獲取非模板。 – juanchopanza
'foo'是一個模板函數專門化的名稱(你碰巧明確地專門化了;如果你沒有,你會看到「1」)。如果你沒有提供'<...>'語法,重載解析確實會更喜歡非模板函數。 –
這不違反ODR嗎? – jrok