使用转换功能直接初始化

克里斯汀S

这个问题与直接初始化中的Conversion运算符几乎相同,但是,这与我在实现中注意到的东西有关。

考虑以下:

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

struct B { operator A(); };

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

我对标准的理解是,由于这种直接初始化的源和目标类型不同,因此仅考虑构造函数。构造函数A(A &&)被选择,并且所述参数被绑定到结果转换函数,产生总共两个呼叫的:operator A()A(A&&),如[dcl.init] /17.6.2.1是将适用于这里的唯一子子句。

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

除了我找不到描述此行为的任何措辞的事实外,我没有理由不只在这里使用转换构造函数。

讲故事的人-Unslander Monica

基本上所有上述编译器都在进行并在CWG Issue 2327中实现该方向您是正确的,当前没有措辞允许您观察到这种行为。但是,正如问题所指出的那样,如果有的话,那真的很好。

但是,要对其进行准确的处理是很棘手的,因此问题仍然处于“起草”阶段。但是编译器可以并且确实实现了复制省略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

直接初始化指针

来自分类Dev

使用初始化与直接使用值声明变量

来自分类Dev

直接初始化不可复制,不可移动的成员,而无需使用聚合初始化

来自分类Dev

直接初始化与值初始化

来自分类Dev

数组初始化功能

来自分类Dev

JavaScript初始化功能

来自分类Dev

JavaScript初始化功能

来自分类Dev

使用助手功能初始化结构时出错

来自分类Dev

如何禁止直接结构初始化

来自分类Dev

高效的std :: vector的直接初始化

来自分类Dev

使用转换器初始化JsonSerializerOptions

来自分类Dev

初始化时是统一初始化还是直接初始化?

来自分类Dev

初始化监听器的功能

来自分类Dev

快速范围初始化功能错误

来自分类Dev

CKEDITOR的初始化功能未执行

来自分类Dev

Firebase功能测试初始化失败

来自分类Dev

初始化监听器的功能

来自分类Dev

int变量初始化功能失败

来自分类Dev

初始化类的功能方法

来自分类Dev

CKEDITOR的初始化功能未执行

来自分类Dev

使用{* this}初始化类

来自分类Dev

在Visual Studio 2013中没有使用直接初始化语法的智能

来自分类Dev

为什么使用auto的直接列表初始化被认为是不好的或不受欢迎的?

来自分类Dev

如何在OpenMP threadprivate指令中使用对象的直接初始化?

来自分类Dev

为什么C ++ 11不允许使用auto进行直接列表初始化

来自分类Dev

为什么C ++ 11不允许使用auto进行直接列表初始化

来自分类Dev

使用直接初始化与std :: initializer_list时的不同指令

来自分类Dev

C ++对象构造-直接初始化与使用'='运算符是否等效?

来自分类Dev

为什么我们不能使用scanf直接初始化struct中的变量?