gpt4 book ai didi

c++ - 重载函数模板

转载 作者:行者123 更新时间:2023-11-30 01:56:46 25 4
gpt4 key购买 nike

我得到了 2 个重载函数模板:

template <class typ1, class typ2>
void szab(typ1, typ2) {cout << "2 typy" << endl;}

template <class typ1>
void szab(typ1, typ1) {cout << "1 typ" << endl;}

为什么当我调用这样的函数时没有歧义: szab(1, 1); ?第二个模板不是第一个模板的特殊版本吗?当我在模板中声明 2 个参数时,这并不意味着它们必须是不同的类型,它们只是可以。为什么编译器会选择第二个模板?

最佳答案

第二个是“更专业的模板”,需要较少的“替换”,编译器将其选为重载解析阶段的最佳选择。

根据 §14.5.6.2(函数模板的部分排序):

Partial ordering selects which of two function templates is more specialized than the other by transforming each template in turn (see next paragraph) and performing template argument deduction using the function type. The deduction process determines whether one of the templates is more specialized than the other. If so, the more specialized template is the one chosen by the partial ordering process.

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

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