g++ 关闭构造函数优化

c++ 标准中有规定编译器可以跳过拷贝/移动构造函数而直接创造对象,只要此时的拷贝/移动构造函数是可访问的。

 

这个操作可以减少临时量所带来的开销,比如

string s = "123";

本来应该的步骤为

string _temp("123"); //将const char *转换为string

string s = _temp;     //使用拷贝构造函数构造s

// 然后析构掉_temp

 

但是往往编译器会直接将代码改成这样:

string s( "123");  //跳过了临时量的构造与析构

即便是拷贝构造函数与转换构造函数的执行效果并不一样,编译器也会这么干。所以保证两段代码的行为是一致的应该是程序员的责任- -!

在编译的时候加上下面这个选项可以关闭掉这个优化

-fno-elide-constructors

 

posted on 2015-04-08 21:21  远近闻名的学渣  阅读(1260)  评论(0)    收藏  举报

导航