【问题标题】:Weird error C2131 with constexpr declared variable带有 constexpr 声明变量的奇怪错误 C2131
【发布时间】: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 计数器停在 &lt; 255(而不是 256),代码编译得很好。 这背后的解释是什么,我该如何解决?

【问题讨论】:

  • 看不到任何明显的错误,所以这看起来像一个编译器错误。 gcc 编译上面没有任何问题。
  • MSVC编译很好
  • 我刚刚找到解决方案,我会马上发布答案,谢谢!
  • 内循环有什么作用?它只是一遍又一遍地分配给同一个元素。

标签: c++ visual-c++


【解决方案1】:

进一步搜索使我找到了以下link,在对参数值进行了一些试验和错误之后,我找到了解决方案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多