奇怪的错误 C2131 与 constexpr 声明变量

Weird error C2131 with constexpr declared variable

本文关键字:constexpr 声明 变量 C2131 错误      更新时间:2023-10-16

>我正在尝试使用 VS2017 编译以下代码片段,但它抛出了一个error C2131: expression did not evaluate to a constant,而输出日志中没有任何进一步的细节。

class Example
{
public:
constexpr Example() : m_int()
{
for (int i = 0; i < 256; ++i)
{
for (int j = 0; j < 256; ++j)
{
m_int[i] = i;
}
}
}
private:
int m_int[256];
};
int main()
{
constexpr Example vv; // <-- error C2131 here
return 0;
}

但是,由于我不知道的某种原因,如果我在< 255(而不是 256(停止 j 计数器,代码编译正常。 这背后的解释是什么,我该如何解决?

进一步搜索使我进入了以下链接,经过对参数值的一些试验和错误,我找到了解决方案。

在编译器设置中添加/constexpr:steps10000000添加到项目中C++其他选项已修复错误,现在它可以正常编译。我希望VS2017在这种情况下会抛出错误C4593而不是C2131,因为它可以省去我的头痛!