C 中是否存在复制省略?
Does copy elision exist in C?
当我读到复制省略时,许多来源只提到 C++ 而不是 C。
他们说明了 C++ 标准如何允许在编译器认为这是正确的事情时进行这种优化。
但是 C 呢? C 编译器执行复制省略,还是永远不会优化复制的 C 标准保证?
C 和 C++ 都允许任何遵循 as-if 规则的优化。由于 C 没有构造函数 - 因此构造函数具有副作用 - 可以在不违反此规则的情况下省略副本。另一方面,C++ 需要做一个特殊情况,允许实现中断 as-if.
因此,通过 as-if 规则,C 中隐式存在复制省略。
当我读到复制省略时,许多来源只提到 C++ 而不是 C。
他们说明了 C++ 标准如何允许在编译器认为这是正确的事情时进行这种优化。
但是 C 呢? C 编译器执行复制省略,还是永远不会优化复制的 C 标准保证?
C 和 C++ 都允许任何遵循 as-if 规则的优化。由于 C 没有构造函数 - 因此构造函数具有副作用 - 可以在不违反此规则的情况下省略副本。另一方面,C++ 需要做一个特殊情况,允许实现中断 as-if.
因此,通过 as-if 规则,C 中隐式存在复制省略。