1:常量與巨集回顧:
c++中的const常量可以替代巨集引數定義;
const int a = 5 ; 等價於 # define a 5
巨集具有***,那麼c++是否有方法避免呢?
2:內聯函式:
c++中推薦使用內聯函式代替巨集**片段
c++中inline關鍵字宣告內聯函式
inline int func(int a, int b)
return (a < b ? a: b);
注意內聯函式宣告的時候inline關鍵字必須和函式定義在一起,否則編譯器會直接忽略內鏈請求
關於內聯函式:
c++可以將乙個函式進行內聯編譯
被c++編譯器內聯編譯的函式稱為內聯函式
內聯函式在最終生成的**中是沒有定義的
c++編譯器直接將函式體插入到函式呼叫的地方、
內聯函式呼叫沒有普通函式呼叫時的額外開銷(壓棧,跳轉,返回)
c++編譯器不一定准許函式的內聯請求!
內聯函式是一種特殊的函式,具有普通函式的特徵(引數檢查,返回型別等)
內聯函式是對編譯器的一種請求,因此編譯器可能拒絕這種請求
內聯函式由編譯器處理,直接將編譯後的函式體插入呼叫的地方
巨集**片段由預處理器處理,進行簡單的文字替換,沒有任何編譯過程
現代c++編譯器能夠進行編譯優化,因此一些函式即使沒有
inline宣告,也可能被編譯器內聯編譯
另外,一些現代c++編譯器提供了擴充套件語法,能夠對函式進行強
制內聯 如:g++中的__attribute__((always_inline))屬性
使用內聯函式有一定的限制:
不能存在任何形式的迴圈語句
不能存在過多的條件判斷語句
函式體不能過於龐大
不能對函式進行取址操作
函式內聯宣告必須在呼叫語句之前
編譯器對於內聯函式的限制並不是絕對的,內聯函式相對於普通函
數的優勢只是省去了函式呼叫時壓棧,跳轉和返回的開銷。因此,
當函式體的執行開銷遠大於壓棧,跳轉和返回所用的開銷時,那麼
內聯將無意義
c++中內聯函式實現機制:
inline int func(int a, int b)
int _tmain(int argc, _tchar* argv)
在c++中首先檢查是否可以進行內聯編譯,如果編譯器請求通過,那麼內聯函式func寫入到符號表
當執行int r = func(1,2);
這句**的時候,用符號表中的函式體直接替換func呼叫int r = return (a < b ? a: b);
3:函式的預設引數:
c++中可以在函式宣告時為引數提供乙個預設值,當函式調
用時沒有指定這個引數的值,編譯器會自動用預設值代替
int mul(int x = 0); //函式宣告時指定預設引數
int _tmain(int argc, _tchar* argv)
int mul(int x)//定義的時候不再指定
函式預設引數
函式預設引數的規則
只有引數列表後面部分的引數才可以提供預設引數值
• 一旦在乙個函式呼叫中開始使用預設引數值,那麼這個引數後的所
有引數都必須使用預設引數值
int add(int a, int b = 0, int c =0)
當b使用預設引數時,後面的c也必須使用預設引數
4:函式佔位引數:
在c++中可以為函式提供佔位引數
佔位引數只有引數型別宣告,而沒有引數名宣告
一般情況下,在函式體內部無法使用佔位引數
//函式佔位引數
int add1(int a, int b, int )
c++支援這樣的函式佔位引數
有什麼意義?
可以將佔位引數與預設引數結合起來使用
意義
• 為以後程式的擴充套件留下線索
• 相容c語言程式中可能出現的不規範寫法
eg:在c語言中:
void func()
呼叫的時候
func(1);
func(1,2);
在c語言中可行,在c++中編譯不通過
但是void func(int = 0)
func(1)就可以編譯通過;
小結 c++中可以通過inline宣告內聯函式
內聯函式在編譯時直接將函式體插入函式呼叫的地方
inline只是一種請求,編譯器不一定允許這種請求
內聯函式省去了普通函式呼叫時壓棧,跳轉和返回的開銷
c++中在宣告函式的時候指定引數的預設值
c++可以宣告佔位符引數,佔位符引數一般用於程式擴充套件
和對c**的相容
C 學習筆記(7) C 語句
c 程式是一組函式,而每個函式又是一組語句。c 有好多種語句型別,上篇筆記總結的表示式可以轉化為語句,通常被稱作表示式語句。除此之外,還有空語句 返回語句 return 0 復合語句 程式塊 等。以上又被統稱為簡單語句。相對於簡單語句,c 還有類似於c語言的特殊語句,條件語句 迴圈語句以及轉移語句。...
C語言學習筆記 7 C語言中的小數
小數是由整數和小數兩部分組成,由點號.隔開,如0.23 0.444 23.67 3.98等都是合法小數,屬於十進位制數。除此外,還有指數形式,如7.25103 0.035105 27.36 10 3等。任何小數都可以用指數形式來表示。在c語言中,小數的指數形式為 aen或aen解釋 a為尾數部分,是...
7 C 類的使用
定義了乙個類之後,便可以如同用int double等型別符宣告簡單變數一樣,建立該類的物件,稱為類的例項化。類的定義實際上是定義了一種型別,類不接收或儲存具體的值,只作為生成具體物件的 藍圖 只有將類例項化,建立物件 宣告類的變數 後,系統才為物件分配儲存空間。class computer 類定義 ...