非 constexpr 库函数的扩展处理是否符合要求?
GCC 将非 constexpr 标准库函数视为 constexpr 的能力某些情况会引发有关一致性的问题。
矛盾标准
在 C 11 标准草案中,似乎明确允许将内置函数视为 constexpr。然而,在 C 12 中共识发生了变化,提案发生了变化,导致 C 14 明确禁止这种行为。
假设规则
在 C 11 中,它目前还不清楚假定规则是否允许这种行为。一些意见认为可能,但这种解释在处理此特定主题的 LWG 2013 号决议中并未得到证实。
GCC 的实施
GCC 实施此行为基于 LWG 2013 早期提出的决议,该决议允许隐式处理为 constexpr 函数。然而,最终的决议发生了变化,这个扩展现在在 C 14 中是不符合的。
严格模式下的一致性
为了符合 C 14 标准,GCC遇到时应在严格一致性模式(-std=c 11 -pedantic 或 -std=c 14 -pedantic)下发出警告constexpr 上下文中使用的非 constexpr 库函数。或者,应在这些模式下禁用此行为。
内在函数豁免
标准不涵盖编译器内在函数,因此,它们可能会被区别对待。在 constexpr 上下文中使用编译器内部函数很可能仍然可以接受。
以上是GCC 在 Constexpr 上下文中对非 constexpr 标准库函数的扩展处理是否符合 C 标准?的详细内容。更多信息请关注PHP中文网其他相关文章!