使用const int 初始化數組大小的難以捉摸的困境
在C 領域,使用常數進行數組大小初始化通常會帶來問題一個令人費解的兩難。雖然某些情況下無縫地允許這種做法,但其他情況下會引發神秘的編譯錯誤。
考慮以下程式碼片段:
<code class="cpp">const int size = 2; int array[size] = {0};</code>
在這個範例中,編譯器很高興地允許使用大小由常數變數「size」指定。原因在於「size」初始化表達式的性質。它是一個常數表達式,這意味著它可以完全在編譯時求值。這使得編譯器可以在編譯過程中確定數組的確切大小,從而方便記憶體分配。
對比上面,看一下這個片段:
<code class="cpp">int a = 2; const int size = a; int array[size] = {0};</code>
這裡,編譯器發脾氣,哀嘆「編譯錯誤」。問題的關鍵在於用於初始化“size”的表達式。它涉及一個非常量變數(“a”)。這將表達式降級為非常量表達式的領域。因此,編譯器無法在編譯時確定陣列的大小。
此行為源自於 C 標準委員會的一項基本決定。委員會優先考慮簡單性和明確性而不是靈活性。實作後者需要複雜的流程分析,區分不可修改的表達式,例如「const int size = a;」以及真正的非常量表達式,例如「const int size = foo();」。這種複雜性被認為是不可取的。
因此,規則仍然存在:陣列大小只能使用常數表達式初始化。這確保編譯器可以明確地確定數組的大小,從而確保可預測的記憶體分配和順利編譯。當冒險進入數組大小初始化的世界時,請始終牢記這條規則。
以上是為什麼我不能在 C 中使用 `const int` 變數初始化陣列大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!