[問題] const 修飾詞使用

看板C_and_CPP (C/C++)作者 (X招待王牌D)時間9年前 (2017/05/06 11:54), 編輯推噓5(6112)
留言19則, 6人參與, 最新討論串1/1
開發平台(Platform): Keil C 問題(Question): 書(施威銘研究室)上說,在宣告變數的同時,在語法前加一修飾詞 const, 將使宣告的變數質變成無法更改。是除了 #define 的方法外,另一種定義 常數的方式: const 資料型別 變數名稱 = 初始值; 我想問這有什麼好處 ? 精華區有一段話: const 的修飾對象是型別 const 規範的是在執行期 (runtime) 決定的常數值 這裡也想請教執行期是什麼意思(真的菜味很重哈), 是program counter開始跳了的時候嗎 ? 還有宣告 const後,能un-const掉去改變數值嗎? 程式碼(Code): 下面是最近前人給的,他說是函數指標的指令集結構。 這邊想問一下 static const 又是什麼意思...謝謝 還有這程式碼有什麼bug或小秘密也請幫忙解說一下 typedef const int (*pEXE_Function)(char *v_pCMD, int v_length); typedef struct { const char *v_pCMD; //command string const EXE_Function pEXE; //command exe function char iParent; char id; } CMD_Format; static const CMD_Format GPzCMDs[] = { {"VER", cmdGPzQryConfig, 0, 50}, {"XXX", cmdRouteXXX, 0, 60} }; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.16.127 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1494042857.A.842.html

05/06 13:12, , 1F
要看是放在什麼scope...有local, file, class
05/06 13:12, 1F

05/06 14:32, , 2F
我經常用來請編譯器幫我檢查是否有意外變更此值的
05/06 14:32, 2F

05/06 14:32, , 3F
狀況,或者在單晶片平台下,請編譯器幫我將此值放在
05/06 14:32, 3F

05/06 14:32, , 4F
唯讀記憶空間。
05/06 14:32, 4F

05/06 14:34, , 5F
也就是說,存取時空間會指向唯讀區。
05/06 14:34, 5F

05/06 15:34, , 6F
Static 關鍵字不同地方有不同用處 這個看起來應該是要
05/06 15:34, 6F

05/06 15:34, , 7F
表示宣告的名字的scope限制在這個file
05/06 15:34, 7F

05/06 15:36, , 8F
Define 是巨集不是變數 會失去一些type 的好處 但是在
05/06 15:36, 8F

05/06 15:36, , 9F
編譯的時候就會被計算出來 所以速度可能較快 另一方面c
05/06 15:36, 9F

05/06 15:36, , 10F
onst 是執行期才知道數值多少的變數 所以速度慢一些
05/06 15:36, 10F

05/06 15:37, , 11F
C++11以後引進constexpr 會盡量在編譯期計算出來 所以
05/06 15:37, 11F

05/06 15:37, , 12F
大多推薦常數用constexpr. macro有一些缺點 詳情可以
05/06 15:37, 12F

05/06 15:37, , 13F
自己google
05/06 15:37, 13F

05/06 15:38, , 14F
其實你可以查define vs const vs constexpr 應該就有
05/06 15:38, 14F

05/06 15:38, , 15F
很多討論了
05/06 15:38, 15F

05/07 00:41, , 16F
使用const可以讓編譯器幫你檢查型別是否正確
05/07 00:41, 16F

05/07 00:43, , 17F
沒事 誤會了...會隱式轉換
05/07 00:43, 17F

05/07 11:03, , 18F
伸手牌當一輩子喔
05/07 11:03, 18F

05/08 09:04, , 19F
試試看constexpr
05/08 09:04, 19F
文章代碼(AID): #1P3KZfX2 (C_and_CPP)
文章代碼(AID): #1P3KZfX2 (C_and_CPP)