在 C 中使用預設值透過引用傳遞參數
在 C 中,函數參數可以透過值和參考傳遞。按值傳遞時,會建立參數值的副本,並將該副本傳遞給函數。透過引用傳遞時,函數直接對參數的記憶體位址進行操作。
透過引用傳遞參數時,無法像透過參數傳遞的方式一樣指定預設值價值。這是因為預設值是在定義函數時初始化的,但引用參數僅在呼叫函數並傳入參數時才初始化。
為了說明這一點,請考慮以下函數宣告:
virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
這裡,「State」參數被宣告為 ULONG 的引用,「sequence」參數被宣告為布林值。但是,為“State”(“= 0”)分配預設值會導致錯誤:
error C2440: 'default argument' : cannot convert from 'const int' to 'unsigned long &' A reference that is not to 'const' cannot be bound to a non-lvalue
發生此錯誤是因為非常量引用無法綁定到非左值(即,臨時表達)。但是,可以為常數引用指定預設值:
virtual const ULONG Write(const ULONG &State = 0, bool sequence = true);
在這種情況下,「State」參數是對 ULONG 的常數引用和預設值(“= 0”)是常數左值。這允許呼叫函數而無需指定“State”的值。
此規則的一個例外是使用靜態變數作為非常量引用的預設值:
static int AVAL = 1; void f(int &x = AVAL) { // stuff } int main() { f(); // equivalent to f(AVAL); }
在此範例中,「x」參數是對int 的非常量引用,預設值(“AVAL”)是靜態變數。這允許調用該函數而無需指定“x”的值。然而,這種技術的實際用途有限。
以上是如何在 C 中使用帶有引用傳遞參數的預設值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!