如何初始化类内浮点常量?

2Ni*_*meo 2 c++ visual-c++

我最近遇到了无法在类常量中初始化的Visual C++ 2005,遇到了无处不在的错误

"错误C2864:...:只能在类中初始化静态const积分数据成员"

从类似的代码

class MyClass:
{
private:
   static const double myConstant = 2.9768;
}
Run Code Online (Sandbox Code Playgroud)

我已经能够发现非整数类型是问题,并且有几种方法可以使用整数常量,但是我没有找到一个令人满意的解决方法来定义作用于类的常量.这种类型的声明在以后/其他编译器中是否合法?

Ker*_* SB 8

在C++ 03中,您必须在类定义之外初始化非整数静态常量:

struct Foo
{
    static const double value;
};
const double Foo::value = 0.5;
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,您可以constexpr从内联的常量表达式初始化任意essions:

struct Foo
{
    static constexpr double value = 0.5;
};
Run Code Online (Sandbox Code Playgroud)

您可能需要或可能不需要为变量提供定义,具体取决于您是否在代码中的其他位置(例如,通过获取其地址).