靜態成員可能被聲明爲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++反射 – Dov