关于C++优化的问题

Luc*_*ore 7 c++ optimization

我已经读过C++标准允许优化到可以实际阻碍预期功能的程度.当我说这个时,我说的是返回值优化,你可能在拷贝构造函数中实际上有一些逻辑,但编译器优化了调用.

我发现这有点不好,因为在那些不知道这可能花费相当一些时间修复由此产生的错误的人.

我想知道的是,是否存在编译器过度优化可以改变功能的任何其他情况.

例如,类似于:

int x = 1;
x = 1;
x = 1;
x = 1;
Run Code Online (Sandbox Code Playgroud)

可能优化为单个x = 1;

假设我有:

class A;

A a = b;
a = b;
a = b;
Run Code Online (Sandbox Code Playgroud)

这可能也可以优化吗?可能不是最好的例子,但我希望你知道我的意思......

sbi*_*sbi 12

Elide复制操作是允许编译器优化到副作用明显改变的唯一情况.不要依赖于被调用的复制构造函数,编译器可能会优化这些调用.

对于其他所有内容,"as-if"规则适用:编译器可以根据需要进行优化,只要可见的副作用与编译器根本没有优化的相同.

("可见的副作用"包括,例如,写入控制台或文件系统的内容,但不包括运行时和CPU风扇速度.)