【发布时间】:2016-09-25 12:24:33
【问题描述】:
是否允许 C++ 编译器替换:
const auto myType = MyType(1, 2, 3);
与:
const MyType myType(1, 2, 3);
即,发出分配,或者有什么可以防止这种情况发生?
注意: 我问的原因是我更喜欢第一个版本。
【问题讨论】:
-
是的,这就是编译器应该做的,而不是创建一个临时的,然后调用一个复制或移动构造函数。
-
第一个语法需要一个非显式、非删除和可访问的移动/复制构造函数(尽管它可能在未来发生变化)。
-
没有赋值,这是初始化。并假设第一个编译,那么是的,编译器可以消除临时。这称为复制省略。
标签: c++ c++11 constructor move-constructor copy-elision