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