c 預設實參 zz

2022-04-10 13:58:19 字數 1345 閱讀 4541

預設實參是一種雖然並不普遍、但在多數情況下仍然適用的實參值。呼叫函式時,可以省略有預設值的實參。編譯器會為我們省略的實參提供預設值。

預設實參是通過給形參表中的形參提供明確的初始值來指定的。程式設計師可為乙個或多個形參定義預設值。但是,如果有乙個形參具有預設實參,那麼,它後面所有的形參都必須有預設實參。

例如,下面的函式建立並初始化了乙個 string 物件,用於模擬視窗螢幕。此函式為視窗螢幕的高、寬和背景字元提供了預設實參:

string screeninit(string::size_type height = 24,

string::size_type width = 80,

char background = ' ' );

呼叫包含預設實參的函式時,可以為該形參提供實參,也可以不提供。如果提供了實參,則它將覆蓋預設的實參值;否則,函式將使用預設實參值。下面的函式 screeninit 的呼叫都是正確的:

string screen;

screen = screeninit(); // equivalent to screeninit (24,80,' ')

screen = screeninit(66); // equivalent to screeninit (66,80,' ')

screen = screeninit(66, 256); // screeninit(66,256,' ')

screen = screeninit(66, 256, '#');

函式呼叫的實參按位置解析,預設實參只能用來替換函式呼叫缺少的尾部實參。例如,如果要給 background 提供實參,那麼也必須給 height 和 width 提供實參:

screen = screeninit(, , '?'); // error, can omit only trailing arguments

screen = screeninit( '?'); // calls screeninit('?',80,' ')

注意第二個呼叫,只傳遞了乙個字元值,雖然這是合法的,但是卻並不是程式設計師的原意。因為 '?' 是乙個 char,char 可提公升為最左邊形參的型別,所以這個呼叫是合法的。最左邊的形參具有 string::size_type 型別,這是 unsigned 整型。在這個呼叫中,char 實參隱式地提公升為 string::size_type 型別,並作為實參傳遞給形參 height。

既可以在函式宣告也可以在函式定義中指定預設實參。但是,在乙個檔案中,只能為乙個形參指定預設實參一次。下面的例子是錯誤的:

// ff.h

int ff(int = 0);

// ff.cc

#include "ff.h"

int ff(int i = 0) // error

c 預設實參

最近在看關於函式的一部分,其中有這兩句話很吸引我,一是 既可以在函式宣告中也可以在函式定義中指定預設實參,但是在乙個檔案中,只能為乙個形參指定預設實參一次 二是 如果在函式定義的形參表中提供預設實參,那麼只有在包含該函式定義的原始檔中呼叫該函式時,預設實參才是有效的。細細一想才明白這句話的含義,於是...

C 預設實參

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

c 虛函式與預設實參

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