为什么标准允许我的编译器应用复制省略,即使它涉及可见的副作用,从而打破了假设规则?
当有人保证复制省略时,这对我来说有点似是而非,因为复制/移动的实际功能(这将调用程序行为中的可见变化)不一定必须存在,但为什么/这是怎么回事在 C++17 之前?
是不是因为编译器一般不能检测到副作用(我不知道这是否可能)?
最佳答案
允许这种优化的情况涉及临时拷贝。从概念上讲,这些应该没有明显的效果,但该语言允许类编写者将他们想要的任何内容放入复制构造函数中。
因此,复制构造函数有时实际上可能会产生可见的副作用。严格来说,假设规则可能不适用。
人们认为这种优化非常有用,而且危害很小,值得包含在语言中。考虑到这种优化早于总是会复制返回值的移动语义。
关于c++ - 为什么复制省略是假设规则的异常(exception)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294438/