1
class Cl {
static constexpr double PI;
};
constexpr double Cl::PI = 3.14;
(26):错误C2737:' private:static double const 氯:: PI' :' constexpr'对象必须初始化
2
class Cl {
static constexpr double PI = 3.14;
};
(26):错误C2864:' Cl :: PI' :一个静态的 具有类内初始化程序的数据成员必须具有非易失性const 整体式
type是' const double'
在两次尝试中,错误都在类中的同一行。我正在使用VisualStudio / MSVC 2013年11月的CTP编译器。
请注意,使变量const
不是解决方案,因为我想在constexpr函数和普通函数中使用此常量。
答案 0 :(得分:4)
根据Stephan T. L.在此blog中的表格和解释, constexpr 确实仅在VS Nov 2013 CTP中部分实施。
CTP支持C ++ 11 constexpr,但成员函数除外。 (另一个限制是不支持数组。)此外,它不支持 支持C ++ 14扩展的constexpr规则。
(希望将其放在评论中,但还没有足够的分数)
编辑:只是添加,在Herb的blog中,关于静态成员的问题几乎相同,但答案与Stephan相同。
我认为简单地说2013年11月CTP没有实现所需的OP功能(发送错误报告?)并等待2014年7月的CTP或VS Next(遗憾地),这是安全的。
答案 1 :(得分:1)
你无法真正“初始化”一个constexpr。正如关键字所暗示的那样,它是一个常量表达式,而不是变量。
您似乎只想在这里使用const
。
第二个例子中的编译器指出你不能使所有类型都为const-expr。
更新:这似乎是MSVC限制。
很高兴有责任。
确实,MSVC2010-2013中的C++11 support page mentions: 没有constexpr
支持