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 でコンパイルすると動作しますが、出力が「3」ではなく「2」である理由がわかりません。

私が覚えている限り、テンプレート以外の関数は常にテンプレート関数よりも優先されるのに、特殊化された foo と呼ばれるのはなぜですか?

ありがとう

4

1 に答える 1

8

具体的には、特殊バージョンを使用しています。あなたはこれをしましたか:

template <typename T>
void foo(T a) {
    std::cout << "1" << std::endl;
}

void foo(float a) {
    std::cout << "2" << std::endl;
}
int main(void) {
    foo(1.0f);
}

テンプレート化されていないバージョンを選択した場合よりも。

于 2012-12-06T11:04:16.437 に答える