复制省略

复制省略或者译作“省略不必要的复制”(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)

  • 还没有评论,来抢沙发吧。