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 呢?

谢谢

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 回答