C++函數參數指南

1.非引用形參

非引用形參表示對對應實參的局部副本,對這類形參的修改僅僅改變了局部副本的值,一旦函數執行完成,這些局部變量的值也就沒有了。

1.1 指針形參

該類形參的任何改變也僅僅作用於局部副本,如果函數將新指針值賦給形參,主調函數使用的實參指針的值沒有改變。

1.2const形參

如果函數使用非引用的非const 形參,則即可給該函數傳遞const 實參,也可以傳遞非const 的實參。

如果函數使用非引用的const 形參,也是既可以給該函數傳遞const 實參,也可以傳遞非const 的實參,但是不可以改變實參的局部副本。

注意:儘管函數的形參是const,但編譯器卻將const 形參被聲明爲普通類型,如下

void fcn(const int i)就是void fcn(int i)

2.引用形參

作用有以下點:

2.1 使用引用形參可以返回額外的信息

函數只能返回單個值,通過傳遞引用形參可以改變實參的值,所以對應修改的值進行了改變。

2.2 利用const 引用避免複製

形參作爲引用,可以避免被複制,而且形參爲const 引用,則函數體不能通過該引用來修改實參。

應該將不需要修改的引用形參定義爲const 引用,因爲非const 引用形參只能與完全相同類型的非const 對象關聯,所以普通的非const 引用形參既不能用const對象初始化,也不能用字面值或者產生右值的表達式實參初始化。

3. 數組形參

因爲數組不能複製,所以無法編寫使用數組類型形參的函數,但是可以仍可將函數的形參寫成數組的形式,如下定義的三種形式是等價的。

void getValue(int*){}

void getValue(int[]){}

void getValue(int[10]){}

注意:當編譯器檢查數組形參關聯的實參時,它只會檢查實參是不是指針、指針的類型和數組元素的類型是否匹配,而不會檢查數組的長度。

在傳遞數組時,實參是指向數組第一個元素的指針,形參複製的是這個指針的值,而不是數組元素本身。

通過引用傳遞數組,編譯器檢查數組實參的大小與形參的大小是否匹配。

4. 含可變形參的函數

在無法列舉出傳遞給函數的所有實參的類型和數目時,可以使用省略符形參。省略符暫停了類型檢查機制。它們的出現告訴編譯器,當調用函數時,可以有0個或多個實參,而實參的類型未知。

發佈了43 篇原創文章 · 獲贊 13 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章