gpt4 book ai didi

c++ - 使用转换函数直接初始化

转载 作者:行者123 更新时间:2023-11-30 04:43:42 24 4
gpt4 key购买 nike

这个问题几乎与Conversion operator in direct-initialization相同,但是,这是我在实现中注意到的一些事情。

考虑以下几点:

struct A { A(); A(A&&); };

struct B { operator A(); };

void f()
{
B b;
A a(b);
}

我对标准的解读是,由于这种直接初始化,源类型和目标类型不同,所以只考虑构造函数。选择构造器A(A&&),将参数绑定(bind)到转换函数的结果,一共调用了两次:operator A()A(A&&),如[dcl.init]/17.6.2.1是唯一适用于此处的子句。

但是,这不是 gcc、msvc 和 clang 或 icc 显示的行为,它们都表示仅调用了 operator A()。我认为这只是编译器优化是否正确?

我看不出有什么理由不单独在这里使用转换构造函数,除了我找不到任何描述这种行为的措辞。

最佳答案

基本上所有上述编译器都在继续并实现 CWG Issue 2327 中的方向.你是对的,目前没有允许你观察到的行为的措辞。但正如问题所述,如果有的话,那就太好了。

然而,要找到它的确切措辞并不容易,因此该问题仍处于“起草”阶段。但是编译器可以并且确实实现了复制省略..

关于c++ - 使用转换函数直接初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58110041/

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