Wie wird eine const QString-Referenz im Fehlerfall zurückgegeben?

8

beachte den folgenden Code:

%Vor%

Wie kann ich vermeiden, einen leeren QString zu haben , ohne den Rückgabetyp der Methode zu ändern? (Es scheint, dass die Rückgabe eines leeren QString, der auf dem Stack zugewiesen wurde, eine schlechte Idee ist)

Danke.

    
moala 28.02.2010, 21:11
quelle

7 Antworten

8

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?

    
Ton van den Heuvel 28.02.2010, 22:20
quelle
3

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%     
John Knoeller 28.02.2010 21:21
quelle
2

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.

    
rohanpm 28.02.2010 22:33
quelle
0

Wie wäre es mit einem vorinitialisierten Standardwert:

%Vor%     
Rupert Jones 28.02.2010 21:22
quelle
0

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.

    
stijn 28.02.2010 21:23
quelle
0

Würde QString :: null ausreichen?

    
blarf 30.04.2010 04:17
quelle
0

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:

  • Anstatt eine leere Zeichenfolge still zu senden, wird eine Ausnahme ausgelöst. oder
  • kümmern Sie sich nicht darum, eine Referenz zurückzugeben, und geben Sie einfach einen QString zurück, der sich auf die Rückgabewertoptimierung zur Eliminierung der Kosten für das Kopieren des Objekts.
DevSolar 30.04.2010 04:34
quelle

Tags und Links