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