gpt4 book ai didi

c++ - constexpr 和未定义的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:35 24 4
gpt4 key购买 nike

此代码在 GCC 8 中编译,但在 GCC 7 和 clang 中均不编译。

constexpr int a = 1;
constexpr int b = --const_cast<int&>(a);

这显然是 UB。

我的问题:标准语对评估包含 UB 的 constexpr 怎么说 - 这段代码是否应该编译?

最佳答案

GCC 8 错误

constexpr 编译时表达式中的所有未定义行为使得表达式在编译时不被评估(基本上不是 consteval,使用基本上具有该含义的新关键字).

初始化 constexpr 实际上需要一个 consteval 表达式。

如果您所做的是 UB(我相信是),我不会说明,但如果它是 UB,那么它就不应该编译。

我会看看是否能找到标准引语来支持这些断言;但没有技巧在这里需要。只是一个简单的原则:在编译时表达式评估期间的编译时,编译器必须审核它为 UB 运行的代码,如果它们遇到 UB(再次,在编译时),则表达式不再是编译时表达式。

关于c++ - constexpr 和未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57909807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com