gpt4 book ai didi

c++ - 为什么不能使用 constexpr if (expression) ,甚至可以在编译时评估表达式

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:11 24 4
gpt4 key购买 nike

//code1
class Test {
public:
constexpr Test(const char *p) : p_(p) {}
constexpr int foo() const
{
if(p_[0] != 'a')
return 1;
else
return 2;
}
const char *p_;
};

int arr[Test("bbb").foo()]; //this works

为什么下面的代码不起作用?

  //code2
constexpr int foo() const
{
constexpr if (p_[0] != 'a') //add constexpr
return 1;
else
return 2;
}

出现错误:

error: expected unqualified-id before ‘if’

据我了解,由于“p_[0] != 'a'”可以在编译时求值(如代码1所示),所以constexpr if (p_[0] != 'a') 应该是可以在编译期间评估的有效语句。

最佳答案

To my understanding, since "p_[0] != 'a'" can be evaluated at compile time(as shown in code1), so constexpr if (p_[0] != 'a') should be a valid statement which can be evaluate during compiling.

p_[0] != 'a' 可以在编译时求值,但也可以在运行时求值。

问题是if constexpr 测试必须 在编译时求值。当 foo() 在运行时执行或在相应的 Test 对象在运行时初始化时,这是不可能的。

所以错误。

或者更好:如果你写对了错误

if constexpr (p_[0] != 'a')

在您的情况下,ifconstexpr 之间的顺序也是错误的。

关于c++ - 为什么不能使用 constexpr if (expression) ,甚至可以在编译时评估表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52340688/

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