gpt4 book ai didi

c++ - 当参数不同时重载解析不选择模板

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:11 27 4
gpt4 key购买 nike

为什么f的第三次函数调用没有使用函数模板?

#include <iostream>
using namespace std;

template<class T> void f(T x, T y) { cout << "Template" << endl; }

void f(int w, int z) { cout << "Non-template" << endl; }

int main() {
f( 1 , 2 );
f('a', 'b');
f( 1 , 'b');
}

最佳答案

函数模板类型推导非常严格。对于每一对函数参数和实参,推导是孤立发生的,然后比较推导结果:

[temp.deduct.type]

2 In some cases, the deduction is done using a single set of types P and A, in other cases, there will be a set of corresponding types P and A. Type deduction is done independently for each P/A pair, and the deduced template argument values are then combined. If type deduction cannot be done for any P/A pair, or if for any pair the deduction leads to more than one possible set of deduced values, or if different pairs yield different deduced values, or if any template argument remains neither deduced nor explicitly specified, template argument deduction fails.

这意味着x的类型是从1(和int)推导出来的,而y的类型是从推导出来的>'b'(一个字符),就好像另一个参数不存在一样。此推导分别产生 T = intT = char,并且由于它们是不同的类型,因此推导必须根据上述段落明确失败。

如果您调用实例化函数,您必须自己明确指定T:

f<int>( 1 , 'b');
f<char>( 1 , 'b');

关于c++ - 当参数不同时重载解析不选择模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55886826/

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