0
我一段cpp的初學者,無法瞭解以下內容:爲什麼要在結構中初始化const靜態變量?
struct A{
int i;
static int j;
}
int A::j = 20;
在這裏, 我明白了爲什麼靜態varible無法裏面A
被初始化並且它必須被初始化使用範圍分辨率A
outised。 (這是j
的點存儲器將被分配並且值被初始化)並且j
在這裏不添加到sizeof(A)
,因爲它是靜態變量並且具有用於所有對象的靜態存儲。
請看下面的代碼:
struct B{
int a;
const static int b = 20;
}
在這裏, 我被迫在結構聲明直接初始化的b
值。爲什麼它是這樣的,如果靜態變量是const
類型? 如果我試圖在B
範圍外定義這個變量,那麼它會拋出一個編譯器錯誤,指出有一個前面的聲明b
。這裏當b
的內存被實際分配了,爲什麼它必須在聲明中被初始化,爲什麼不能用::
這樣的運算符來初始化它,如普通的靜態變量?
您不必在聲明中初始化'b'的值。 'const int B :: b = 20;'會正常工作。我懷疑你在'struct'聲明的末尾忘了添加';'。 –
當你嘗試初始化'B'之外的'b'時會發生什麼?你有編譯器錯誤嗎?什麼是錯誤? –
@FrançoisAndrieux如果靜態變量是'const static'類型的,爲什麼我可以給變量的值與正常的'static'變量不同? – Mbeginner