在 C 中,const 關鍵字可用來防止修改物件或指標的。讓一些開發人員感到驚訝的是,語法可能會有所不同:
const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer Object const *obj; // same as const Object* obj;
問題是哪種語法先出現以及為什麼兩者都是正確的。
Const 放置的歷史起源
C 和C 語言語法允許從左到右解析器,這意味著編譯器讀取輸入從左到右,並在遇到標記時對其進行處理。
在解析宣告時,當 標記被消耗時,宣告狀態將變更為指標類型。如果 const 先遇到 ,則限定符會套用至指標宣告;如果在 * 之前遇到它,則限定符適用於所引用的資料。
由於語意意義不會因 const 的位置而改變,因此兩種放置都被接受。
函數指標的意義
函數也會出現類似的情況指標:
再一次,從左到右的解析器解釋在
首選用法
最終,一種語法相對於另一種語法沒有明顯的偏好。應根據可讀性和開發人員偏好進行選擇。
但是,如果希望與指標和函數指標的語法保持一致,則在引用類型的左側使用 const 可能更合適:
const Object* obj; // no change to obj pointer or value Object const *obj; // no change to obj pointer or value
以上是C 中的 Const 放置:「const T」與「T const」——我應該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!