[英]static const double initialization in C++
我有一些用“较新”的编译器构建的旧代码,并且遇到了一些对我来说没有意义的静态const双重初始化错误。 这是我所拥有的:
//header.h
class myclass
{
private:
static const double foo = 3.1415;
static const double bar = 12345.0 * foo;
};
使用gcc版本4.3.3编译此代码时-我看到以下错误:
foo cannot appear in a constant-expression
我已经认为这不是静态初始化顺序的失败,因为我相信固有数据类型具有明确定义的初始化顺序-尤其是当它们位于同一类中时。 作为测试,我已经尝试过static_cast< double >
表达式,但这会产生另一个错误,指出const表达式中仅允许使用整型强制类型转换。
非constexpr
static
数据成员如果是整数或枚举类型,则只能在类定义中的声明处直接初始化。 必须在源文件中给所有其他数据类型一个单独的定义,并且只能在该定义上进行初始化。 因此,将您的类定义更改为:
class myclass
{
private:
static const double foo;
static const double bar;
};
并将这些定义完全引入一个.cpp
文件中:
const double myclass::foo = 3.1415;
const double myclass::bar = 12345.0 * foo;
如果您可以使用足够现代的C ++,则可以选择将类内声明更改为constexpr
:
class myclass
{
private:
static constexpr double foo = 3.1415;
static constexpr double bar = 12345.0 * foo;
};
这样,除非您将它们用作对象而不是值(例如,使用地址),否则它们将不需要在源文件中进行定义。 但是,GCC 4.3.3不支持C ++ 11的该部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.