为什么不能-O0禁用gcc编译优化?

jia*_*afu 5 c++ string g++

string str="fujian";
Run Code Online (Sandbox Code Playgroud)

有些书说代码会触发复制构造函数,但是g ++会对它进行优化,以便不会调用复制构造函数.

但是,我使用g ++命令-O0来禁用优化,但它仍然无法触发复制构造函数.

怎么理解呢?

And*_*owl 9

使用GCC和Clang,您可以使用-fno-elide-constructors编译标志来关闭复制/移动省略优化.

  • @jiafu它是一种特殊类型的优化,允许改变程序的行为(它不遵循"as-if"规则).因此,将其关闭实际上可能会修改程序的行为,这将是一件坏事.使用`-o`切换优化级别不应改变程序行为. (8认同)
  • 只是为了澄清:优化选项是`-O`不是`-o`. (2认同)