奇怪的错误 C2131 与 constexpr 声明变量
Weird error C2131 with constexpr declared variable
>我正在尝试使用 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,因为它可以省去我的头痛!
相关文章:
- 从非类型模板参数声明 constexpr 数组的可移植方法
- 奇怪的错误 C2131 与 constexpr 声明变量
- 为什么必须将 const 添加到 constexpr 中才能进行字符串文字声明?
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 使用模板参数还包括 constexpr 成员函数enable_if单独定义和声明模板成员函数
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 有没有办法声明一个公共静态常量,该常量将使用 constexpr 在源文件中定义(有什么区别)?
- 是否可以使用"if constexpr"来声明具有不同类型和init-expr的变量
- 无法声明静态 constexpr char []
- 在类外部初始化的 constexpr 静态成员的声明中是否需要 constexpr 说明符
- constexpr:constexpr成员的定义和声明
- 我可以在模板参数中声明一个 constexpr lambda 吗?
- 如果我的班级是字面的班级,那么将我的类的对象声明为constexpr是多余的
- 为什么我不能在类中另一个函数的声明中使用静态 constexpr 的结果?
- 为什么我不能使用 msvc 在模板类中声明静态 constexpr 变量?
- 静态常量声明,变量的constexpr定义,有效的c ++?
- 使用 constexpr 构造函数对结构进行前向声明
- SFINAE 消除、Constexpr 和函数模板:我可以将声明和定义分开吗?
- 模板函数是否以内联方式声明 constexpr,即使实例化不是 constexpr
- 混合constexpr声明和const定义