Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erscheint die Konstante der obersten Ebene bei Rückgabetypen, die keine Klasse sind, überflüssig?

Warum erscheint die Konstante der obersten Ebene bei Rückgabetypen, die keine Klasse sind, überflüssig?

Linda Hamilton
Linda HamiltonOriginal
2024-11-04 07:56:02931Durchsuche

Why Does Top-Level Const on Non-Class Return Types Seem Redundant?

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!

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