【问题标题】:Does copy elision exist in C?C中是否存在复制省略?
【发布时间】:2015-07-03 06:09:41
【问题描述】:

当我读到复制省略时,许多资料只提到了 C++ 而没有提到 C。

他们说明了如果编译器认为这是正确的做法,C++ 标准如何允许这种优化发生。

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

【问题讨论】:

  • 复制省略在 C++ 中很重要,因为构造过程和对象语义。在c中你没有这个。一个副本只是一个逐字节的哑副本,受制于通常的变量管理优化

标签: c optimization compiler-construction copy


【解决方案1】:

C 和 C++ 都允许遵循 as-if 规则的任何优化。由于 C 没有构造函数 - 因此具有副作用的构造函数 - 可以在不违反此规则的情况下省略副本。另一方面,C++ 需要做一个特殊情况,允许实现打破 as-if

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

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    相关资源
    最近更新 更多