C语言中是否存在复制省略?

5

当我了解复制省略时,许多来源只提到C ++而不是C。

它们指出,如果编译器决定这样做是正确的,C ++标准允许进行此优化。

但是对于C呢? C编译器是否执行复制省略,或者C标准保证永远不会优化掉副本?


2
C++中的复制省略对于构造过程和对象语义非常重要。在C语言中,你没有这个功能。一个复制只是一个愚蠢的逐字节复制,受通常变量管理优化的影响。 - Christophe
1个回答

6

无论是C还是C++,都允许遵循 as-if 规则的任何优化。由于C没有构造函数-因此没有具有副作用的构造函数-拷贝可以省略而不违反该规则。另一方面,C ++需要特殊处理,其中实现允许打破 as-if 规则。

因此,在C中,复制省略隐含地通过 as-if 规则存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接