为什么复制省略是 as-if 规则的例外?

kaw*_*ken 0 c++ copy-elision as-if

为什么标准允许我的编译器应用复制省略,即使它涉及可见的副作用,从而打破了 as-if 规则?

当一个人保证复制省略时,这对我来说是有道理的,因为复制/移动的实际功能(这将调用程序行为的可见变化)不一定存在,但为什么/如何在 C+ 之前+17?

是不是因为编译器一般不能检测副作用(不知道是否可行)?

Fra*_*eux 5

允许这种优化的情况涉及临时文件的副本。从概念上讲,这些应该没有可见的效果,但该语言允许类编写者将他们想要的任何内容放入复制构造函数中。

因此,复制构造函数有时实际上可能具有可见的副作用。严格来说,as-if 规则可能不适用。

人们认为这种优化足够有用,而且危害最小,值得包含在语言中。考虑到这种优化早于返回值总是被复制的移动语义。