c 預設實參

2021-06-07 12:56:20 字數 1525 閱讀 1853

**:

最近在看關於函式的一部分,其中有這兩句話很吸引我,一是:既可以在函式宣告中也可以在函式定義中指定預設實參,但是在乙個檔案中,只能為乙個形參指定預設實參一次;二是:如果在函式定義的形參表中提供預設實參,那麼只有在包含該函式定義的原始檔中呼叫該函式時,預設實參才是有效的。細細一想才明白這句話的含義,於是從網上找了一篇關於這兩句話的解釋,然後轉在這裡,積累點點滴滴。

預設實參是一種雖然並不普遍、但在多數情況下仍然適用的實參值。呼叫函式時,可以省略有預設值的實參。編譯器會為我們省略的實參提供預設值。 預設實參是通過給形參表中的形參提供明確的初始值來指定的。程式設計師可為乙個或 多個形參定義預設值。但是,如果有乙個形參具有預設實參,那麼,它後面所有的形參都必須有預設實參。

例如,[cpp]view plain

copy

intinitperson(

intold, string name = 

"二毛"

, string race = 

"漢");  

#include "cperson.h"

//int initperson(int old, string name = "二毛", string race = "漢")

/*既可以在函式宣告也可以在函式定義中指定預設實參。但是,在乙個檔案中(注意#include

包含了介面檔案cperson.h),只能為乙個形參指定預設實參一次。所以上面的是錯誤的。

*/int

initperson(

intold, string name, string race)  

雖然既可以在函式宣告也可以在函式定義中指定預設實參,但是若是在函式的定義中指定預設 實參,那麼只有在該函式定義的原始檔中呼叫該函式時,預設實參才是有效的。這句話什麼意思呢? 

舉個例子說明吧, 

[cpp]view plain

copy

intinitperson(

intold, string name, string race);

//沒有在這裡指定預設實參

#include "cperson.h"

...  

//int initperson(int old, string name = "二毛", string race = "漢")

//或者

intinitperson(

intold, string name = 

"二毛"

, string race = 

"漢");

//注意宣告可以多次,上面這種也可以

intinitperson(

intold, string name, string race)  

void

func()  

#include "cperson.h"

...  

void

funca()  

預設實參可以是任何適當型別的表示式,例如常量,函式呼叫,全域性變數等。在呼叫該函式時會求解該表示式。

C 預設實參

預設實參就是函式裡引數的預設值,但是c 使用預設實參也不是隨意的,需要遵守一定的順序規則。void set string name niulei int age 24,string man 通過這就是預設實參 void set string name niulei int age,string ma...

c 預設實參 zz

預設實參是一種雖然並不普遍 但在多數情況下仍然適用的實參值。呼叫函式時,可以省略有預設值的實參。編譯器會為我們省略的實參提供預設值。預設實參是通過給形參表中的形參提供明確的初始值來指定的。程式設計師可為乙個或多個形參定義預設值。但是,如果有乙個形參具有預設實參,那麼,它後面所有的形參都必須有預設實參...

c 虛函式與預設實參

c primer 中原文 像其他任何函式一樣,虛函式也可以有預設實參。通常,如果有用在給定呼叫中的預設實參值,該值在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關 通過基類的引用或指標呼叫虛函式時,預設實參為在基類虛函式宣告中指定的值,如果通過...