gpt4 book ai didi

c++ - C++重载解析-模糊匹配

转载 作者:行者123 更新时间:2023-12-02 10:17:20 25 4
gpt4 key购买 nike

我正在尝试使用以下测试代码尝试一些基本的过载解决方案概念:

void foo()
{
void F(int x, int y); // F1
void F(char x, double y); // F2
F('A', 5);
}

我已经“试图”理解了C++ 17标准的适用部分,并且还查看了cppreference.com。我的理解是,F1的转换顺序包括晋升和完全匹配,而F2的转换顺序包括完全匹配和转换。 cppreference.com部分指出,
...
F1 is determined to be a better function than F2 if implicit conversions for all
arguments of F1 are not worse than the implicit conversions for all arguments of
F2, and
1) there is at least one argument of F1 whose implicit conversion is better than
the corresponding implicit conversion for that argument of F2
...

基于以上所有内容,我认为F1应该被认为是最佳候选者,因为F1的最差转化率优于F2的最差转化率。但是,Microsoft和minGW编译器都生成“模糊”匹配错误。所以很明显我缺少了一些东西。我将对我所缺少的内容进行解释,并希望能在C++ 17中引用该信息。谢谢!

最佳答案

在弄清楚要调用哪个函数时,首先要计算所有可行的候选对象。然后,根据所需的隐式转换的数量对每个函数进行排序。因此,给定电话:

F('a', 5);

需要执行哪些隐式转换?
F1 // 1st argument: char -> int
// 2nd argument: int -> int (none)

F2 // 1st argument: int -> int (none)
// 2nd argument: int -> double

由于 F1F2都必须分别执行一次精确的隐式转换,因此它们都被视为同等良好,并且调用不明确。特别是,这两种转换的等级相同,即分别进行积分提升和浮点提升。

显然,有更多的规则涵盖了更多的情况,但是在这种情况下,这两个功能之间没有平局。

关于c++ - C++重载解析-模糊匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61492335/

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