将非 Constexpr 标准库函数视为 Constexpr 符合标准的编译器扩展吗?
当前的 C 标准要求将标准库函数声明为仅当明确需要时才使用 constexpr。然而,早期的草案另有建议。
C 11 和标准草案
在 C 11 的开发过程中,一项旨在明确允许将非 constexpr 标准库函数视为constexpr。 GCC 决定以严格一致性模式支持此功能是基于此草案。
C 14 中共识的转变
但是,共识在 C 14 的开发过程中发生了变化。该提案进行了修订,最终标准规定,除非明确要求,否则禁止实现声明任何标准库函数 constexpr。
此更改源于对跨实现的不同行为的担忧,因为 SFINAE 可以利用此产生不同的结果相同代码的结果。
一致性GCC
GCC 当前在这种情况下的实现是一个不合格的扩展,因为它违反了 C 14 标准。为了实现一致性,GCC 需要在严格一致性模式下发出警告或禁用此功能。
内在函数
与标准库函数不同,编译器内在函数不受此限制规则,因为它们不在标准范围内。因此,将内在函数视为 constexpr 通常是允许的。
以上是GCC 对非 Constexpr 标准库函数的 Constexpr 处理是合格扩展吗?的详细内容。更多信息请关注PHP中文网其他相关文章!