gpt4 book ai didi

c++ - 模板特化和普通的旧功能

转载 作者:太空狗 更新时间:2023-10-29 20:05:23 25 4
gpt4 key购买 nike

我有一个简单的问题,请检查这段代码:

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?

谢谢

最佳答案

您具体使用的是专用版本。如果你这样做了:

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);
}

它会选择非模板化版本。

关于c++ - 模板特化和普通的旧功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com