Heim  >  Artikel  >  Backend-Entwicklung  >  Wann sollte ich const-Objekte oder Zeiger in C zurückgeben?

Wann sollte ich const-Objekte oder Zeiger in C zurückgeben?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-29 05:46:311083Durchsuche

When Should I Return const Objects or Pointers in C  ?

Soll ich const-Objekte oder Zeiger zurückgeben?

In „Effective C Item 03“ wird empfohlen, const wann immer möglich zu verwenden. Beispielsweise könnte eine Bigint-Klasse sowohl eine veränderliche als auch eine konstante Version einer Operator[]-Funktion haben, um auf ihre Daten zuzugreifen.

Der Unterschied zwischen der Rückgabe eines konstanten Objekts und der Rückgabe eines nicht konstanten Objekts ist jedoch geringer klar für einfache Funktionen wie foo(), die primitive Typen zurückgeben. Man könnte annehmen, dass sie sich identisch verhalten, aber das ist nicht ganz richtig.

Cv-Qualifizierer und Rückgabetypen der obersten Ebene

Bei primitiven Typen sind Top- Level-CV-Qualifizierer für Rückgabetypen werden ignoriert. Daher sind die folgenden Funktionsdeklarationen funktional gleichwertig:

<code class="cpp">int foo();
int const foo();</code>

Beide Funktionen geben ein int zurück, unabhängig vom const-Qualifizierer für den Rückgabetyp.

Die Bedeutung für Klassentypen und Referenzen

Die Unterscheidung wird entscheidend, wenn es um Klassentypen oder Referenzen geht. Durch die Rückgabe eines const T wird verhindert, dass der Aufrufer nicht konstante Memberfunktionen für den zurückgegebenen Wert aufruft. Betrachten Sie das folgende Beispiel:

<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>

Hier gibt gg() ein const-Testobjekt zurück, das den Aufruf seiner nicht konstanten Memberfunktion f() verbietet.

Das obige ist der detaillierte Inhalt vonWann sollte ich const-Objekte oder Zeiger in C zurückgeben?. 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