Sie können nicht. Geben Sie entweder keine Konstante const zurück oder verwenden Sie eine lokale statische Variable wie diese:
%Vor% Der Vorteil dieser Methode gegenüber den anderen vorgeschlagenen Methoden ist, dass diese Lösung keine Änderung der Schnittstelle von MyClass
erfordert. Außerdem kann die Verwendung eines Standardparameters Benutzer Ihrer Klasse verwirren und zu einer falschen Klassennutzung führen. Diese Lösung ist für den Benutzer transparent.
Übrigens, verwenden Sie wirklich ein C-Stil-Array in Ihrer Klasse?
Da erwartet wird, dass ein const
-Wert zurückgegeben wird, sehe ich kein Problem mit einem globalen (oder statischen const) leeren QString, der von allen solchen Funktionen verwendet wird, um eine leere Zeichenfolge zurückzugeben.
Ich bin nicht verrückt nach dem Namen. Ich würde erwarten, dass der "leere" QString ein statisches konstantes Mitglied der QString-Klasse wäre. also würde dein Code stattdessen so aussehen.
%Vor%Sie können es nicht vermeiden, ohne den Rückgabetyp zu ändern.
Wenn Sie sich dafür entscheiden, eine Referenz zurückzugeben, müssen Sie eine Variable des Rückgabetyps haben, die den Gültigkeitsbereich der Funktion überlebt. Wenn Sie die API nicht ändern können (z. B. aufgrund der Kompatibilität mit Binärkompatibilität), sind Sie für immer daran gebunden. Sie müssen Speicher verschwenden, der einen Wert des relevanten Typs speichert, selbst wenn Sie den Rest Ihrer Klassenimplementierung z. erzeuge die Werte im laufenden Betrieb oder lade sie von einer externen Quelle ab.
Aus diesem Grund empfehlen C ++ - API-Design-Guides, die Probleme mit binären Kompatibilitäten erkennen, dass Sie kein const&
ohne sorgfältige Prüfung zurückgeben.
Wenn Sie darauf bestehen, eine Referenz zurückzugeben, müssen Sie sich auf ein Objekt beziehen; Sie müssen also das QString-Objekt irgendwo in Ihrem Beispiel haben, es gibt keinen Weg um es herum.
Eine Technik, die für Ihren Fall geeignet scheint, besteht jedoch darin, Ihre Methode so zu ändern, dass sie eine Standard-ID akzeptiert, die zurückgegeben wird, falls der Index außerhalb des gültigen Bereichs liegt:
%Vor%Sie könnten auch eine Ausnahme auslösen, wenn der Index außerhalb des Bereichs liegt, dann müssten Sie bei einem Fehler nicht wirklich zurückkehren, aber das ist wahrscheinlich nicht das, was Sie wollen.
Sie können die Notwendigkeit eines leeren QStrings nicht vermeiden, ohne die Funktionsweise von getId()
zu ändern. Aber es gibt zwei Ansätze, die mir in den Sinn kommen:
Tags und Links c++ qt const-reference