带有 constexpr 声明变量的奇怪错误 C2131
Posted
技术标签:
【中文标题】带有 constexpr 声明变量的奇怪错误 C2131【英文标题】:Weird error C2131 with constexpr declared variable 【发布时间】:2019-12-07 04:44:32 【问题描述】:我正在尝试使用 VS2017 编译以下 sn-p,但它会抛出一个 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;
但是由于某些我不知道的原因,如果我将 j 计数器停在 < 255
(而不是 256),代码编译得很好。
这背后的解释是什么,我该如何解决?
【问题讨论】:
看不到任何明显的错误,所以这看起来像一个编译器错误。 gcc 编译上面没有任何问题。 用MSVC编译很好 我刚刚找到解决方案,我会马上发布答案,谢谢! 内循环有什么作用?它只是一遍又一遍地分配给同一个元素。 【参考方案1】:进一步搜索使我找到了以下link,在对参数值进行了一些试验和错误之后,我找到了解决方案。
将/constexpr:steps10000000
添加到 C++ 编译器设置中的项目附加选项已修复错误,现在可以正常编译。我希望 VS2017 在这种情况下会抛出错误 C4593 而不是 C2131,因为它会让我头疼!
【讨论】:
以上是关于带有 constexpr 声明变量的奇怪错误 C2131的主要内容,如果未能解决你的问题,请参考以下文章