复制省略或者译作“省略不必要的复制”(copy elision),是C++语言标准中定义的编译优化技术。
当一个class类型的的临时对象用于初始化同类型的对象时,复制初始化通常优化为直接初始化;但在语义上仍然需要复制构造函数是可访问的。 例如:
#include
struct C {
explicit C(int) {}
C(const C&) { std::cout
上例,在g++与Visual C++默认都是复制省略。
throw语句抛出一个异常对象,catch语句匹配一个异常对象,默认是要执行复制构造函数的。如下例:
#include
struct C {
C() {}
C(const C&) { std::cout
上例默认应该打印输出两次"Hello World!"
GCC的编译选项-fno-elide-constructors关闭复制省略。
参考文献
评论 (0)