【发布时间】:2017-02-27 16:54:09
【问题描述】:
静态成员可以声明为 const,但必须在声明中对其进行初始化。考虑以下使用循环代码初始化静态数组的情况:
class A {
private:
enum { SIZE = 360 };
static double* vertices;
public:
static void staticInit();
};
double* A::vertices = new double[SIZE];
void A::staticInit() {
double a = 0, b = 0;
for (int i = 0; i < SIZE; i++, a += .01, b += .02)
vertices[i] = sin(a) + c2 * sin(b);
}
上面的代码可以工作。但如果目的是让顶点保持不变,那么将其声明为 const 将在 staticInit 函数上产生编译错误。
在较旧的 C++ 中,我会声明指针 const,并仅在此函数中将其转换为非 const,但今天,编译器不允许这样做,因为它不安全。当然,不声明指针 const 更不安全。
有什么干净的出路吗?
【问题讨论】:
标签: c++11 static constants static-initialization