用來代替 define的const

2021-04-18 16:20:32 字數 1086 閱讀 1996

c++中提倡用const 來代替 #define. 好處

1 :const 進行型別安全檢查

好處2:

const 是有型別的,比如 

const int          val = 0;

const double val = 0;

但是const功能不僅僅於此。而且不同地方出現的const,意義不盡相同,也有一定區別。
這裡僅討論 用作代替#define的const的用法和性質
首先 在***.h檔案中原來的

#define max 100 ---->  const int max 100;

說明:

1 首先const預設是內部變數,只在本cpp檔案中有效,不然乙個***.h被多個cpp

檔案引用後,肯定會重定義。由於const 是內部變數,所以在多個cpp檔案中出現相同的定義完全沒有問題。

2 由於const表示的是常量,也就是值不會被改變,所以編譯器就有可能對其做一些優化。 比如很簡單,做常量摺疊,不給其分配位址空間。

例如 在***.h中定義的

const int max = 100;

這個常量max 就很有可能不佔記憶體空間。

為什麼是很有可能?因為如果有以下3中情況,則需要給const分配空間。

1 const 常量被宣告為 extern

2 對const 常量取位址運算

3 const 值未定

第一種 由於const被宣告為extern 因此其他檔案中的函式可能要使用到該常量,所以要給它分配空間。

第二種,取位址了嚒,沒空間 **來的位址?

第三種,比如:

const int max = i; //i為前面某處定義的變數

此時也要給max分配空間

可以理解,如果 乙個const 常量,即沒有被取位址,又是本檔案內有效,並且值從一開始就是確定的,而且它又是常量,不會被改變,也就沒有必要給它分配空間了。於是便和#define變得差不多一摸一樣了,除了它是有型別的。

php中常量的定義 define和const

在類的外邊第一常量 使用關鍵字define來定義常量。在類外面通常這樣定義常量 define php phpddt.com 在類中,不能使用define,而是使用const來定義常量。class myclass echo myclass constant 一般是define在類外定義常量,const...

union 代替or的情況

技巧2 union 代替or的情況 當sql語句中,or 條件上面有乙個為子查詢,並且子查詢上的表與源表不同,這個時候就可以用union代替or或者你發現執行計畫中的 filter 有 or 並且 or 後面跟上子查詢 exists.的時候就要注意,比如 2 filter t lrr dm e90e...

代替for迴圈的方法

為什麼要挑戰自己在 裡不寫for loop?因為這樣可以迫使你去使用比較高階 地道的語法或庫。文中以python為例子,講了不少大家其實在別人的 裡都見過 但自己很少用的語法。這是乙個挑戰。我要你避免在任何情況下寫for迴圈。同樣的,我也要你找到一種場景 除了用for迴圈以外,用其他方法寫都太難。請...