gpt4 book ai didi

c++ - 非终止 constexpr 函数是否定义明确?

转载 作者:IT老高 更新时间:2023-10-28 23:20:14 25 4
gpt4 key购买 nike

考虑以下代码:

constexpr unsigned f(unsigned x)
{
while (x & 1) x *= 3;
return x;
}

int main()
{
char a[f(2)];
char b[f(1)];
}

如果不是很明显:对于奇数 x,函数 f 永远不会终止。

当我编译上面的程序时with clang on coliru , b 似乎是 VLA,但不是 a:

warning: variable length arrays are a C99 feature [-Wvla-extension]

char b[f(1)];

编译器决定停止对常量表达式求值是否存在明确定义的限制?或者,一个符合标准的编译器进入一个无限循环会很好吗? f(1) 会产生 UB 吗?

最佳答案

有很多东西意味着一个表达式是不是核心常量表达式

-- an invocation of a constexpr function or a constexpr constructor that would exceed the implementation defined recursion limits;

(第 5.19/2 节中的第五点。)。所以限制是实现已定义。

关于c++ - 非终止 constexpr 函数是否定义明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204292/

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