Heim >Backend-Entwicklung >C++ >Wie kann ich Standardwerte mit Pass-by-Reference-Parametern in C verwenden?
Übergabe von Parametern als Referenz mit Standardwerten in C
In C können Funktionsparameter sowohl als Wert als auch als Referenz übergeben werden. Bei der Wertübergabe wird eine Kopie des Parameterwerts erstellt und diese Kopie an die Funktion übergeben. Bei der Übergabe per Referenz arbeitet die Funktion direkt an der Speicheradresse des Parameters.
Bei der Übergabe eines Parameters per Referenz ist es nicht möglich, einen Standardwert auf die gleiche Weise anzugeben wie für übergebene Parameter Wert. Dies liegt daran, dass ein Standardwert initialisiert wird, wenn die Funktion definiert wird, ein Referenzparameter jedoch nur initialisiert wird, wenn die Funktion mit übergebenen Argumenten aufgerufen wird.
Betrachten Sie zur Veranschaulichung die folgende Funktionsdeklaration:
virtual const ULONG Write(ULONG &State = 0, bool sequence = true);
Hier wird der Parameter „State“ als Referenz auf einen ULONG und der Parameter „sequence“ als boolescher Wert deklariert. Allerdings führt die Zuweisung eines Standardwerts zu „State“ („= 0“) zu einem Fehler:
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
Dieser Fehler tritt auf, weil eine nicht konstante Referenz nicht an einen Nicht-L-Wert gebunden werden kann (d. h. a temporärer Ausdruck). Es ist jedoch möglich, einen Standardwert für eine konstante Referenz anzugeben:
virtual const ULONG Write(const ULONG &State = 0, bool sequence = true);
In diesem Fall ist der Parameter „State“ eine konstante Referenz auf einen ULONG und der Standardwert („= 0“) ist ein konstanter Wert. Dadurch kann die Funktion aufgerufen werden, ohne dass ein Wert für „State“ angegeben werden muss.
Eine Ausnahme von dieser Regel ist die Verwendung einer statischen Variablen als Standardwert für eine nicht konstante Referenz:
static int AVAL = 1; void f(int &x = AVAL) { // stuff } int main() { f(); // equivalent to f(AVAL); }
In diesem Beispiel ist der Parameter „x“ eine nicht konstante Referenz auf einen int und der Standardwert („AVAL“) ist eine statische Variable. Dadurch kann die Funktion aufgerufen werden, ohne dass für „x“ ein Wert angegeben werden muss. Diese Technik ist jedoch von begrenztem praktischen Nutzen.
Das obige ist der detaillierte Inhalt vonWie kann ich Standardwerte mit Pass-by-Reference-Parametern in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!