Heim >Backend-Entwicklung >C++ >Warum können C-Funktionen keine Standardwerte für nicht konstante Referenzparameter haben?

Warum können C-Funktionen keine Standardwerte für nicht konstante Referenzparameter haben?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 12:16:15421Durchsuche

Why Can't C   Functions Have Default Values for Non-Const Reference Parameters?

Übergabe von Parametern per Referenz mit Standardwerten in C

In C ist es bei der Übergabe von Parametern per Referenz nicht möglich, einen Standardwert zuzuweisen Wert für den Parameter. Dies führt zu einem Fehler, wenn versucht wird, Funktionen mit Standardwerten für Referenzparameter zu deklarieren. Beispielsweise führt der folgende Code zu einem Fehler:

virtual const ULONG Write(ULONG &State = 0, bool sequence = true);

Fehler aufgetreten:

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

Auflösung

Standardwerte können nur Konstanten Referenzen zugewiesen werden, nicht Nicht-Konstanten Referenzen. Dies liegt an der Einschränkung von C, dass ein temporärer Wert (z. B. der Standardwert) nicht an eine nicht konstante Referenz gebunden werden kann.

Um dieses Problem zu umgehen, können Sie eine tatsächliche Instanz als Standardwert verwenden:

static int AVAL = 1;

void f( int &x = AVAL ) {
   // stuff
} 

int main() {
     f();       // equivalent to f(AVAL);
}

Dieser Ansatz ist jedoch nur begrenzt in der Praxis anwendbar.

Das obige ist der detaillierte Inhalt vonWarum können C-Funktionen keine Standardwerte für nicht konstante Referenzparameter haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn