gpt4 book ai didi

c++ - 为什么 "same signature"的模板和非模板函数重载调用非模板函数?

转载 作者:IT老高 更新时间:2023-10-28 22:02:24 26 4
gpt4 key购买 nike

我有这个代码:

template<
class T = const int &
> void f(T) {}

void f(const int &) {}

int main() {
f(0);
}

为什么它调用第二个而不是第一个?我会认为它们是相同的,但它们显然不是,因为我没有收到重新定义错误。

最佳答案

因为第二个重载不是模板。

当模板函数和非模板函数都可用于解析函数调用时,选择非模板函数。

来自 C++ 11 标准的第 13.3.3/1 段:

[...] 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 [...]

关于c++ - 为什么 "same signature"的模板和非模板函数重载调用非模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666219/

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