gpt4 book ai didi

c++ - 模板与类似的非模板函数

转载 作者:行者123 更新时间:2023-11-30 02:36:07 25 4
gpt4 key购买 nike

我创建了一个模板专用函数和一个具有相同参数的非模板函数。由于实际上两者都是相同的函数,我不确定 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 Best viable function [over.match.best]

1 Define ICSi(F) as follows:

...

Given these definitions, a viable function F1 is defined to be a better function than another viable function F2 if for all arguments i, ICSi(F1) is not a worse conversion sequence than ICSi(F2), and then

...

-- F1 is a non-template function and F2 is a function template specialization, or, if not that,

关于c++ - 模板与类似的非模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33095439/

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