使用關鍵字const而不是define語句的好處有哪些

時間 2021-08-30 10:39:50

1樓:匿名使用者

如果只是常量定義的話,沒有什麼區別

最多是const帶型別可以進行型別的限制,以及可以進行取地址操作提倡使用const變數而不用#define沒有聽說過提倡使用inline函式而不是#define倒是經常提

2樓:區覺越靜和

首先,需要理解const和#define的本質性不同.

使用const的時候(比如const

intvar

=3;),var一來是有型別的,二來它只在程式執行時被讀取.

而使用#define的時候(比如#define

var3),var是作為要修改的文字,3是作文替換文字,最後整個替換過程由編譯器完成,在程式執行後沒有var而直接是3.

也就是說:

#define

var_a

3const

intvar_b=3;

對於:inti=

var_a

+var_b;

在編譯時會被解析為i=

3+var_b;

綜上所述,

#define

ab實際是讓**中所有a替換成b

使用#define一般情況下可以加快執行速度,但降低編譯生成exe的速度.

使用const一般情況下會降低執行速度(因為要不斷從記憶體中取這個常量),但提高編譯速度,因為少去了字串的匹配與替換

至於好處,除了const有型別說明外,其他要看你怎麼用它再算是不是好處...

在c++中,使用const關鍵字而不是#define語句的好處有哪些?

3樓:匿名使用者

define與const的概念:

巨集不僅可以用來代替常數值,還可以用來代替表示式,甚至是**段。巨集的功能很強大,但也容易出錯,所以其利弊大小頗有爭議。

用巨集來代表常數,好處是:

1. 讓**更簡潔明瞭

當然這有賴於你為巨集取一個適當的名字。一般來說,巨集的名字更要注重有明確直觀的意義,有時寧可讓它長點。

2. 方便**的維護

對巨集的處理,在編譯過程中稱為「預處理」。也就是說在正式編譯前,編譯器必須先將**出現的巨集,用其相應的巨集值替換,這個過程有點你我在文書處理軟體中查詢替換。完成預處理後,所有原來的「pai」都成了立即數3.

1415926.所以在**中使用巨集表達常數,歸根結底還是使用了立即數,並沒有明確指定這個量的型別。這容易帶來一些問題。

常量定義的格式為: const 資料型別 常量名 = 常量值;

const float pai = 3.1415926; const的作用是指明這個量(pai)是常量,而非變數。

常量必須一開始就指定一個值,然後在以後的**中,不允許改變pai的值。

如果一個常量是整型,可以省略指出資料型別。

const k = 100; 相當於 const int k = 100;

反過來說,如果不指出資料型別,則編譯器將它當作整型。

const k = 1.234;

你想讓k等於一個實型數,然而最終k的值其實是1。因為編譯器把它當成整型常量。

我們建議在定義變數時,明確指出型別,不管它是整型或其它型別。

const int i = 100;

const double di = 100.0;

4樓:力波鴻

首先,需要理解const和#define的本質性不同.

使用const的時候(比如const int var = 3;),var一來是有型別的,二來它只在程式執行時被讀取.

而使用#define的時候(比如#define var 3),var是作為要修改的文字,3是作文替換文字,最後整個替換過程由編譯器完成,在程式執行後沒有var而直接是3.

也就是說:

#define var_a 3

const int var_b = 3;

對於:int i = var_a + var_b;

在編譯時會被解析為 i = 3 + var_b;

綜上所述,

#define a b實際是讓**中所有a替換成b

使用#define一般情況下可以加快執行速度,但降低編譯生成exe的速度.

使用const一般情況下會降低執行速度(因為要不斷從記憶體中取這個常量),但提高編譯速度,因為少去了字串的匹配與替換

至於好處,除了const有型別說明外,其他要看你怎麼用它再算是不是好處...

5樓:匿名使用者

主要是有資料型別, 用的時候避免一些錯誤

const與#define相比有何優點

6樓:匿名使用者

程式設計師面試寶典中的敘述:

1,const 進行型別檢查

2. const支援一些編譯器的斷點除錯(以上兩點#define都不具有)

7樓:匿名使用者

編譯器檢查型別,避免巨集替換錯誤,如 #define t 1+1 t = t * 2; 你的答案應該是4, 但程式會輸出

版3, 因為 1+1*2 = 3, 但是如果你權用const 就不會出現這種問題。而且編譯器會在優化階段就幫你做完了這個計算,在一定程度上提升了執行的效率。

8樓:0白樺樹

如果寫的不高明,#define 有時會有詭異的bug

c++程式設計基礎教程課後答案(清華大學出版社鄭莉 董淵著)

9樓:綠皮的漆

清華大學c++語言程式設計》鄭莉 第四版 pdf 完整

c語言中const有什麼用途

10樓:天雲一號

const修飾的資料型別是指常型別,常型別的變數或物件的值是不能被更新的。

const關鍵字的作用主要有以下幾點:

(1)可以定義const常量,具有不可變性。 例如:

const int max=100; int array[max];

(2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯; 例如:

void f(const int i)

(5) 為函式過載提供了一個參考。

class a //一個函式

void f(int i) const //上一個函式的過載 ......

}; (6) 可以節省空間,避免不必要的記憶體分配。 例如:

#define pi 3.14159 //常量巨集

const doulbe pi=3.14159; //此時並未將pi放入rom中 ......

double i=pi; //此時為pi分配記憶體,以後不再分配!

double i=pi; //編譯期間進行巨集替換,分配記憶體

double j=pi; //沒有記憶體分配

double j=pi; //再進行巨集替換,又一次分配記憶體!

const定義常量從彙編的角度來看,只是給出了對應的記憶體地址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有一份拷貝,而#define定義的常量在記憶體中有若干個拷貝。

(7) 提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為一個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。

11樓:匿名使用者

(1)可以定義 const 常量

12樓:千鋒教育

const是一個c語言的關鍵字,它限定一個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性。另外,在**別人**的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。

另外const在其他程式語言中也有出現,如c++、php5、c#.net、hc08 c。

(1)可以定義const常量,具有不可變性。

例如:const int max=100; max++會產生錯誤;

(2)便於進行型別檢查,使編譯器對處理內容有更多瞭解,消除了一些隱患。

例如: void f(const int i) 編譯器就會知道i是一個常量,不允許修改;

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!

如(1)中,如果想修改max的內容,只需要:const int max=you want;即可!

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯;

例如: void f(const int i)

13樓:匿名使用者

const是一個關鍵字,用它在c或c++中可以定義一個常量,特點是這個常量不可以在程式中被修改,一但被程式意外修改編譯器就會報錯。

java this關鍵字的使用

未命名 this點後面的表示該類的成員變數 this.name name 表示 成員變數 stirng name 方法引數 string name 這樣寫增加可讀性 很規範!滿意請採納! 雖看似多餘,實際上增加了程式的可讀性,所以我覺得不多餘 this.name name這樣寫讓人看起來知道清楚如果...

關鍵字 《幽遊白書》,戀愛,飛影,軀

他們都是出世後沒有得到過愛和溫情的人,軀瞭解了飛影的意識,覺得他是心地很善良的傢伙,飛影最後也幫助了一直困惑的軀。唉,都說不清楚了,還是親自去看更好些。給你些 這是動畫版的幾集 第九十九集http you.第100集。第109集。不過最好還是去看漫畫版的,以為動畫裡的有一情節沒講,就是飛影幫軀解脫離...

c的override關鍵字什麼意思

override保留字表示當前函式重寫了基類的虛擬函式。在函式比較多的情況下可以提示讀者某個函式重寫了基類虛擬函式,表示這個虛擬函式是從基類繼承,不是派生類自己定義的 強制編譯器檢查某個函式是否重寫基類虛擬函式,如果沒有則報錯。在類的成員函式引數列表後面新增該關鍵字既可。override只是c 保留...