gpt4 book ai didi

c++ - 多个隐式构造函数转换

转载 作者:行者123 更新时间:2023-11-30 01:20:51 29 4
gpt4 key购买 nike

隐式构造函数转换似乎只适用于单个转换。

class A {
public:
A(std::string s) {}
};
class B {
public:
B(A a) { }
};

有了上面的代码,运行

B b{std::string("Hey")};

工作正常。

另一方面,

B b{"Hey"};

没有。

构造函数转换真的只适用于单一转换吗,为什么会这样?为了避免在提供不同的构造函数时可能出现的歧义?

最佳答案

Does constructor conversion really only work with a single conversion?

单个用户定义 转换,是的。它还可能涉及转换之前或之后的标准转换。

why is this the case?

答案很简单,因为这就是指定语言的方式。

更有用:如果允许两次转换,则编译器将不得不考虑它所知道的每种类型,以确定是否存在合适的中间类型。这不仅会带来很多工作(如果您允许任意数量的转换,则使用组合爆炸),而且您可能会产生歧义,并且行为会发生细微的变化,具体取决于在那个时候恰好定义了哪些类型代码。

关于c++ - 多个隐式构造函数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18895737/

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