[英]Templates vs Similar Non-Template Functions
我创建了一个Template Specialized函数和一个具有相同参数的非模板函数。 由于两者都是相同的函数,我不确定C ++编译器如何运行它,因为它现在有两个相同的函数,一个是专用模板,另一个是非模板函数。 我原以为这会导致编译错误,因为编译器会找到两个具有相同参数和返回类型的函数(在本例中为void foo(string))。 但看起来非模板版本是在调用它时执行的版本。 这样做有优先权吗?
如果我误解了,请告诉我。
代码:打印'String Non-Template'
#include <iostream>
#include <string>
using namespace std;
template<typename T>
void foo(T input)
{
cout <<"Generic Template"<<endl;
}
template<>
void foo<string>(string input)
{
cout <<"String Template"<<endl;
}
void foo(string input)
{
cout <<"String Non-Template"<<endl;
}
int main() {
string input = "abc";
foo(input);
return 0;
}
常规函数总是优于函数模板,甚至是函数模板的特化。
从C ++标准:
13.3.3最佳可行功能[over.match.best]
1如下定义ICSi(F):
...
给定这些定义,可行函数
F1
被定义为比另一个可行函数F2
更好的函数,如果对于所有自变量i
,ICSi(F1)
不是比ICSi(F2)
更差的转换序列,然后...
-
F1
是非模板函数,F2
是函数模板特化,或者,如果不是,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.