gpt4 book ai didi

c++ - 不同类的构造函数重载解析

转载 作者:可可西里 更新时间:2023-11-01 16:39:45 25 4
gpt4 key购买 nike

考虑这段代码。

struct A {
int i;
};

struct B {
char c;
};

struct C {
double d;
};

void f(A a);
void f(B b);
void f(C c);

void g()
{
f({5});
}

这里我在 f({5}); 中遇到了歧义。但是好像struct A的构造函数是完全匹配{5}的,而第二个需要整数提升,而最后一个需要 float 转换。

那么为什么会出现歧义呢?

最佳答案

即使序列中的第一个转换排名较差,两个转换序列最终都是用户定义的转换,因为它们都转换为用户定义的类型。

[over.ics.user]

1 A user-defined conversion sequence consists of an initial standard conversion sequence followed by a user-defined conversion ([class.conv]) followed by a second standard conversion sequence.

隐式转换序列中任意位置的用户定义转换为整个序列赋予“用户定义转换”等级。所以这两个转换序列实际上是同一等级的,因此没有一个比另一个更好。

因此函数调用不明确。

关于c++ - 不同类的构造函数重载解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522488/

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