在PHP和C#中,可以在声明常量时对其进行初始化:
class Calendar3
{
const int value1 = 12;
const double value2 = 0.001;
}
我有一个函子的以下C ++声明,该声明与另一个类一起用于比较两个数学向量:
struct equal_vec
{
bool operator() (const Vector3D& a, const Vector3D& b) const
{
Vector3D dist = b - a;
return ( dist.length2() <= tolerance );
}
static const float tolerance = 0.001;
};
这段代码在使用g ++编译时没有问题。现在,在C ++ 0x模式下(-std = c ++ 0x),g ++编译器将输出一条错误消息:
错误:非整数类型的静态数据成员“公差”的类内初始化需要“ constexpr”
我知道我可以static const
在类定义之外定义和初始化此成员。同样,可以在构造函数的初始化程序列表中初始化非静态常量数据成员。
但是,有什么方法可以像在PHP或C#中那样在类声明中初始化常量吗?
更新资料
我static
之所以使用关键字,是因为可以在g ++的类声明中初始化此类常量。我只需要一种在类声明中初始化常量的方法,无论它是否声明为常量static
。
I used static keyword just because it was possible to initialize such constants within the class declaration in g++. I just need a way to initialize a constant in a class declaration no matter if it declared as static or not.
这是决定成员是否应该的错误方法static
。永远不要让词汇惰性决定代码的语义。