首页 > 后端开发 > C++ > C 14 编译器能否将非 constexpr 标准库函数一致地视为'constexpr”?

C 14 编译器能否将非 constexpr 标准库函数一致地视为'constexpr”?

Mary-Kate Olsen
发布: 2024-12-05 22:35:13
原创
230 人浏览过

Can C  14 Compilers Conformingly Treat Non-constexpr Standard Library Functions as `constexpr`?

Constexpr 处理非 constexpr 标准库函数的编译器扩展是否一致?

在 C 11 中,标准草案似乎允许处理标准库函数作为 constexpr,即使它们没有明确标记为 constexpr。然而,这种立场已经演变了。

C 14 演变

在 C 14 中,明确指出非标准要求的函数不应通过以下方式声明为 constexpr实施。 C 14 标准草案第 17.6.5.6 节对此进行了概述:

An implementation shall not declare any standard library function signature as constexpr except for those where it is explicitly required.
登录后复制

做出此决定是为了防止实现分歧,特别是 SFINAE 的使用导致不同的可观察行为。

GCC 的实现

GCC 之前处理过某些非 constexpr标准库函数作为 constexpr 基于早期的 LWG 2013 提案决议。然而,这种行为在 C 14 中不再被认为是符合的。

严格模式下警告不存在

尽管存在不符合性,GCC 不会在严格一致性模式下生成警告( -std=c 11 -迂腐)。这可能是一个疏忽,将在未来的更新中解决。

内在函数豁免

编译器内在函数不受与标准库函数相同的规则的约束。因此,使用像这样的内部函数:

static constexpr double a = __builtin_cos(3.);
登录后复制

应该被认为是符合的。

结论

目前将非 constexpr 标准库函数视为 constexpr C 14 中的不合格扩展。虽然 GCC 根据先前的提案决议在 C 11 中允许这样做,预计此扩展将被删除或修改以符合当前的 C 14 标准。

以上是C 14 编译器能否将非 constexpr 标准库函数一致地视为'constexpr”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板