c++中函數的參數傳遞,內聯函數和默認實參的理解

1.參數傳遞c++

 

1)函數調用時,c++中有三種傳遞方法:值傳遞、指針傳遞、引用傳遞。函數

給函數傳遞參數,遵循變量初始化規則。非引用類型的形參一相應的實參的副本初始化。對(非引用)形參的任何修改僅做用域局部副本,並不影響實參自己。優化

爲了不傳遞副本的開銷,可將形參指定爲引用類型。對引用形參的任何修改會直接影響實參自己。應將不須要修改實參的引用形參定義爲const引用。spa

2)引用做爲參數的特色:指針

a.傳遞引用給函數,被掉函數的形參做爲原來主調函數中的實參變量或對象的一個別名使用,因此被調函數中對形參變量的操做就是對其相應的目標對象(主調函數)的操做。對象

b.使用引用傳遞函數的參數,在內存中並無產生實參的副本,他是直接對實參操做。而使用通常變量傳遞函數的參數,當發生函數調用時須要給參數分配存儲單元,形參變量是實參變量的副本。若是傳遞的是對象,還將調用拷貝構造函數。因此傳輸數據較大時,使用引用比通常變量傳遞參數的效率和所佔空間都好。遞歸

c.使用指針做爲函數的參數能達到引用的效果,可是,在被調用函數中一樣要給形參分配存儲單元,且須要重複使用「*指針變量名」的形式進行運算,容易產生錯誤且閱讀性較差。另外一f方面,在主調函數的調用點處,必須用變量的地址做爲實參,而引用更加容易使用,清晰。內存

2.內聯函數作用域

內聯函數,通常用inline修飾。編譯器

1)成員函數稱爲內聯。在類中成員函數所有默認爲內聯函數。在類中聲明的成員函數若是加了inline,則其爲內聯函數,若是沒有加inline,在類外定義該成員函數時加了inline,該成員函數也爲內聯函數。

2)普通函數稱爲內聯函數。在普通函數的定義或申明前加inline使其成爲內聯函數。一般編譯時,調用內聯函數的地方,將不進行函數調用,而是使用函數體替換調用處的函數名。

形式相似宏替換(內聯擴展)

3)內聯機制適用於優化小的,只有幾行並且常常被調用的函數(大多數編譯器支持 遞歸函數的內聯)

3.默認參數

1)默認參數只在函數聲明中設定一次。只有在無函數聲明時,才能夠在函數定義中設定。

2)默認參數的順序自右向左,即一個參數設定了默認值時,其右邊的參數都要有默認值

3)默認參數調用時,遵循參數調用順序,自左向右逐個調用(與第2點分清楚)

4).宏定義和內聯函數的區別:宏定義是在預處理階段進行代碼替換,而內聯函數是在編譯階段插入代碼。宏定義沒有類型檢查,內聯函數有類型檢查。

相關文章
相關標籤/搜索