Profitieren Nicht-Klassen-Rückgabetypen von Const?
In C wurde die Verwendung von const als bewährte Methode für Immutable hervorgehoben Datenverarbeitung. Es scheint jedoch, dass die Qualifizierung von Nicht-Klassen-Rückgabetypen mit const keinen merklichen Unterschied ergibt:
<code class="cpp">int foo() { } const int foo() { }</code>
Warum gibt es dann diese Unterscheidung, wie sie am Beispiel der Bigint-Klasse veranschaulicht wird:
<code class="cpp">int& operator[](const int index); const int operator[](const int index) const;</code>
Erklärung:
Const-Qualifizierer der obersten Ebene, die auf die Rückgabetypen von Nicht-Klassenfunktionen angewendet werden, werden effektiv ignoriert, wodurch die beiden obigen Deklarationen identisch werden. Dies gilt jedoch nicht für Referenzen:
<code class="cpp">int& operator[](int index); int const& operator[](int index) const;</code>
In solchen Szenarien ist die Unterscheidung sinnvoll.
Darüber hinaus werden konstante Qualifizierer der obersten Ebene für Rückgabetypen in Funktionsdeklarationen ebenfalls ignoriert .
Die Relevanz von const-Qualifizierern erstreckt sich auch auf Klassenrückgabetypen. Wenn eine Funktion T const zurückgibt, führt jeder Versuch, nicht konstante Funktionen für das zurückgegebene Objekt aufzurufen, zu einem Fehler, wie unten dargestellt:
<code class="cpp">class Test { public: void f(); void g() const; }; Test ff(); Test const gg(); ff().f(); // legal ff().g(); // legal gg().f(); // illegal gg().g(); // legal</code>
Das obige ist der detaillierte Inhalt vonWarum erscheint die Konstante der obersten Ebene bei Rückgabetypen, die keine Klasse sind, überflüssig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!