首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用转换函数直接初始化

使用转换函数直接初始化
EN

Stack Overflow用户
提问于 2019-09-26 13:22:10
回答 1查看 63关注 0票数 1

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

请考虑以下几点:

代码语言:javascript
复制
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()。我假设这只是编译器优化,对吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-26 15:17:32

它本质上就是前面提到的所有编译器在CWG Issue 2327中实现的方向。你说得对,目前还没有允许你观察到的行为的措辞。但正如这期杂志指出的那样,如果有的话,那就太好了。

然而,在它的确切位置上来是很棘手的,所以这个问题仍然处于“起草”阶段。但是编译器可以而且确实实现了复制省略..

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58110041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档