Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板专门化和普通旧函数_C++_Templates_Specialization_Partial Specialization - Fatal编程技术网

C++ 模板专门化和普通旧函数

C++ 模板专门化和普通旧函数,c++,templates,specialization,partial-specialization,C++,Templates,Specialization,Partial Specialization,我有一个简单的问题,请检查此代码: 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

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

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 );
}
模板
空富(A)

{cout您具体使用的是专用版本。您是否这样做过:

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);
}
模板
无效foo(T a){

std::您是否需要调用
foo(1.0f)
来获取非模板。
foo
是模板函数专门化的名称(您恰好明确专门化了该函数;如果没有专门化,则会看到“1”)。如果不提供
语法,重载解析确实会更喜欢非模板函数。另请参见@jrok:No,因为
foo
foo
是不同的名称。调用函数时只编写
foo
也会导致查找像
foo
这样的函数模板,这只是一个问题过载分辨率的“特征”。