这个问题是关于c++标准的措辞的。
所有编译器,我认为应该是这样,取消复制构造函数以初始化对象b
bellow(assembly here):
struct B;
struct A{
operator B();
};
struct B{
B(const B&);
B(B&&);
};
void test(A a){
B b(a);
}
但是当我阅读该标准时,我不明白为什么会发生这种省略(大胆的说法)[dcl.init]/17.6.2:
具体来说就是调用了构造函数。但是没有编译器会这样做。
我想我缺少了一些东西或没有正确阅读标准。我应该如何阅读标准?
这与标准的前几段和下几段形成了鲜明对比,后者专门规定了复制省略[dcl.init]/17.6.1:
和[dlc.init] /17.6.3:
最后一句话使我回到[dcl.init] /17.6.1,这也意味着复制省略。
最佳答案
@ T.C。在评论中回答,这是核心语言问题CWG2327。
关于c++ - 当参数转换为目标类型时,复制构造函数省略项以进行直接初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54297545/