首页 >后端开发 >C++ >将非 constexpr 标准库函数视为'constexpr”符合 C 标准吗?

将非 constexpr 标准库函数视为'constexpr”符合 C 标准吗?

Linda Hamilton
Linda Hamilton原创
2024-12-03 19:32:14277浏览

Is Treating Non-constexpr Standard Library Functions as `constexpr` Conforming to the C   Standard?

将非 constexpr 标准库函数视为 Constexpr:一致性分析

问题是编译器扩展是否处理非 constexpr 标准constexpr 的库函数是一致的。尽管 C 11 标准草案允许此类处理,但随后的发展澄清了这一问题。

C 14 明确禁止

在 C 14 中,标准草案第 17.6.5.6 节明确指出,除非明确指出,否则实现不得将任何标准库函数签名声明为 constexpr 必需的。该裁决禁止将非 constexpr 标准库函数视为 constexpr。

GCC 扩展

GCC 实现了一个将某些内置函数视为 constexpr 的扩展。然而,根据更新的 C 14 标准,此扩展被认为是不符合标准的。

As-if 规则和可观察行为

最初不清楚 as- if 规则允许将非 constexpr 函数视为 constexpr。假设规则允许实现偏离标准的要求,只要它们产生等效的可观察行为。但是,更改函数的 constexpr 状态会影响可观察的行为,如 SFINAE 测试所示,使用相同的代码时,其行为会有所不同。

符合缓解措施

为了使符合 GCC 扩展,编译器需要在严格一致性模式下发出警告(例如,-std=c 11 -pedantic)当在 constexpr 上下文中使用非 constexpr 标准库函数时。

内在函数异常

编译器内在函数不包含在标准中,可以免除 constexpr 函数规则。使用内置内在函数(例如 __builtin_cos)作为 constexpr 可能是被允许的。

以上是将非 constexpr 标准库函数视为'constexpr”符合 C 标准吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn