g++ 关闭构造函数优化
c++ 标准中有规定编译器可以跳过拷贝/移动构造函数而直接创造对象,只要此时的拷贝/移动构造函数是可访问的。
这个操作可以减少临时量所带来的开销,比如
string s = "123";
本来应该的步骤为
string _temp("123"); //将const char *转换为string
string s = _temp; //使用拷贝构造函数构造s
// 然后析构掉_temp
但是往往编译器会直接将代码改成这样:
string s( "123"); //跳过了临时量的构造与析构
即便是拷贝构造函数与转换构造函数的执行效果并不一样,编译器也会这么干。所以保证两段代码的行为是一致的应该是程序员的责任- -!
在编译的时候加上下面这个选项可以关闭掉这个优化
-fno-elide-constructors
浙公网安备 33010602011771号