使用const可以采用類似定義變量的方法來定義常量,在定義的時候必須初始化以指明常量值。比如 const int a =1; 。
那么編譯器會給const定義的常量分配內(nèi)存空間嗎?如果分配了內(nèi)存空間,那么每次使用這個常量都要訪問這個地址,空間效率暫且不論,時間效率不也被大大浪費?在這里可能一開始大家都會有這樣的疑問。特別是單片機編程出身的我,在那個一無所知的時候覺得浪費效率簡直渾身難受(單片機的計算能力非常有限)。
先說是否給const常量分配空間,答案是會。可以對一個const常量取地址,因此無疑const常量在內(nèi)存中是有一席之地的。
再說時間效率,實際上編譯器都會采用常量折疊技術(shù)來優(yōu)化代碼。具體說就是像宏替換一樣把常量替換成立即數(shù)。但與宏替換不同的是,這個是在編譯階段完成的。這樣凡是用到const常量的時候,都不需要訪問內(nèi)存去取出常量值,而是直接用立即數(shù)(這個數(shù)是直接寫在機器指令里的)。這樣的時間效率和宏替換相當(dāng)。盡可能多的使用const關(guān)鍵字吧,這樣可以大大減少bug數(shù)量。
a = =
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式