為什麼經常用const來代替巨集

2021-08-13 08:27:05 字數 1655 閱讀 4678

c語言用#define,c++也可以用,它還可以用const來表示常量。

常量可以使程式的可讀性變強,想一下如程式中全是變數字串,會不會很麻煩呢?我們寫程式會相當複雜。

巨集和const具體就不介紹怎麼使用了。注意的是,巨集後面沒有分號,const有的。

1.const是有型別的,而巨集是沒有的。它等於是給某個數字或者字串用特定的名字來表示,就是起乙個別名,這樣會很方便。

2.在編譯器進行編譯的時候,巨集是直接替換的,並不會檢查錯誤,這個時候如果出現錯誤就不好排查了。並且巨集沒有型別安全檢查。

3.有些整合化的而工具可以對常量進行除錯,巨集不可以除錯。

4.在c++中盡量不使用巨集,而是用const代替。

注意:再類中不能初始化const資料成員,只能在建構函式的初始化列表中初始化

要建立乙個在整個類中都恆定的常量?用列舉實現。列舉不會占用物件的儲存空間,在編譯時被全部求值,缺點就是它不可以表示浮點,而且只能表示整數,最大值有限

const最大的用途就是作為函式的引數,返回值,或者是函式的定義體。

用const修飾的函式的引數,如果引數作為輸出用,不管是什麼型別的引數都不能不能加const修飾,否則該引數將會失去輸出功能。

const只能修飾輸入引數:傳遞指標,可以防止意外的改動該指標,起到保護作用。

如果是值傳遞的話,就不要加const了,因為,值傳遞本來就需要進行引數的複製,加了const就出現錯誤了。

如果是非型別的引數的話,比如說是乙個string類,傳值就會很浪費空間,因為還要拷貝,所以傳引用會更加的有效率,引用只是變數的別名,不會有拷貝,提高效率,所以一般情況下,非型別的的引數都是傳引用。如果是內建型別的話,就沒有必要了。

返回值修飾指標:const char *getstring(); 表示該函式返回值的內容(指標指向的內容不可以改變,不能被修改)該返回值只能賦值給加const修飾的同型別的指標

返回值就是內建型別:一般不用const修飾,我們都知道,函式的返回值,在最後返回的時候都會進行臨時物件的拷貝,是用乙個臨時物件儲存著的。所以就不要加const了

返回值是類型別:此時需要搞清楚,這個函式是想返回什麼,它是想返回乙個物件的拷貝,還是僅僅返回「別名」。如果這個返回值在函式退出後還存在,那麼就返回引用,如果不存在,就不加引用。

函式返回值採用「引用傳遞」的場景並不是很多,例如類中的賦值運算子的過載,採用引用返回值,就是為了實現鏈式表達,就是實現連續賦值的功能。

任何不會修改資料成員的函式都應該定義為const型別的,就是為了防止修改。定義為const的話,如果不小心修改了,編譯器也會報錯,這就提高了程式的健壯性,防止出錯。

注意:const成員函式的宣告只能放在函式宣告的尾部。

提高函式的執行效率,c語言用巨集來提高執行效率,但是巨集也有很多的缺點,所以c++中又引入內聯,吧函式定義為內聯,可以減少壓棧,內聯函式沒有呼叫棧楨的開銷,

注意:並不是所有的函式都支援內聯,(即使定義了內聯,也不一定就是沒有呼叫棧楨)要求函式內部必須比較簡單,沒有複雜的結構,例如遞迴,複雜的 迴圈體。inline必須與函式定義體放在一起。類中的成員函式預設為inline

但是並不是所有的函式都用為內聯就比較好了,因為內聯會複製**,如果所有的函式都用內聯,那**量就會非常的多,這就會很浪費資源了。

很多情況下不宜是用內聯,因為總**量會變得很多,消耗空間。

例如:

**較長,迴圈,遞迴,等。

為什麼Python可以代替shell?

完全可以,shell的功能python均可實現,而且 量更少 結構更優 可閱讀性更好,而python可實現的功能shell卻不一定能,如運維中會用到的用於網路通訊的socket模組 用於web的django框架 用於效能採集的psutil模組等,而且shell對作業系統的命令依賴性較強,python...

我為什麼經常去「海內」

我最近經常去海內,但不表明我喜歡海內,我真正喜歡的是 sns 這種形式。加入海內首先是因為有好友已經在裡邊 聽說海內做網際網路的人比較多?還因為海內的名字不像 校內 開心 等 sns 讓我感到自卑,我已經不是和小孩子一起玩的年齡了。其實最早打算去乙個 sns 裡面看一看,是出於了解 sns 這種網路...

為什麼用hexo代替jekyll

最近想要搞個個人部落格,因為不想自己搞站點,所以找到了github pages,它提供給我們網域名稱和空間,多省事啊。那靜態頁面用什麼工具呢?一開始我用的是jekyll,然後我有了那句經典的感受,那句話是從入門到放棄,啊,多麼痛的領悟!下面我來扒一扒 官網,那個色調看著很傷眼睛啊,乙個docs看下來...