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!