C++: Variablenübergabe Funktion: In/Out oder In Out Seperat?

Gast #6407286
Möglichkeit 3: Den String bzw. die String-ref als Rückgabewert.

Und wie immer lautet die Antwort: Kann man so nicht sagen, kommt drauf 
an.

Was macht die Funktion denn überhaupt mit dem String?
Gast #6407306
Vielleicht könnt Ihr mir alle drei Anwendungsfälle mal beschreiben wann 
Ihr die einsetzen würdet :) Ich bin wirklicher Anfänger und möchte 
einfach den Unterschied und die Anwendung davon wissen
Gast #6407321
Technokrat schrieb:
> Hey,
>
> was macht mehr Sinn oder ist gängiger?
>
> void foo(std::string& Input, std::string& Output){}
>
> bool foo(std::string& In_Out){}
>
> Bei zweiter Variante ist es doch üblich eine Rückgabe zu generieren,
> damit ich nach Aufruf erkenne wann sich der Wert verändert hat!?

Kommt drauf an. Wenn du den String inplace veränden musst, dann 
Variante 2. Sonst vermutlich
1
std::string foo(std::string const& Input);
bzw.
1
std::string foo(std::string_view Input);

moep schrieb:
> Möglichkeit 3: Den String bzw. die String-ref als Rückgabewert.
Welchen Grund gibt es für die Rückgabe als Reference?
Gast #6413106
Technokrat schrieb:
> Vielleicht könnt Ihr mir alle drei Anwendungsfälle mal beschreiben wann
> Ihr die einsetzen würdet :) Ich bin wirklicher Anfänger und möchte
> einfach den Unterschied und die Anwendung davon wissen

Das kann man wirklich nicht sagen. Es gibt sogar Fälle wo eine Variante 
sehr viel Sinn machen würde, man aus guten Gründen trotzdem eine andere 
nimmt.

Ein Beispiel, du schreibst eine Bibliothek. Für fast alle Methoden 
bietet sich eine Variante an. Dann schreibst du eine Methode für die 
eine andere Variante besser wäre. Aber, damit die Bibliothek einheitlich 
bleibt, bleibst du bei der ersten Variante.

Anderes Beispiel, du schreibst Code auf einer Plattform (Betriebssystem, 
Framework, ...), wo sich eine Variante durchgesetzt hat. Dann, wenn es 
nicht extrem gute Gründe dagegen gibt, verwendest du in deinem Code auch 
diese Variante. Auch wenn die in deinem Code nicht immer optimal ist.

Einheitlichkeit nimmt einem das Denken ab und vereinfacht spätere 
Wartung. Du kannst dich im Code auf wichtigere Dinge konzentrieren.

Bei deinen Beispielen fehlen übrigens noch Varianten. Nämlich die, bei 
denen der Status der Methode nicht als ein bool zurückgegeben wird, 
sondern bei Fehlern eine Exception ausgelöst wird.
#6413345
P. S. schrieb:
> Den Rückgabewert einer Funktion für die Rückgabe eines Wertes zu
> verwenden ist schon ziemlich verrückt!

Ja, ich weiß bei atoi() immer nicht, wurde eine 0 erkannt oder wurde 
Mumpitz übergeben. Ich verwende daher besser sscanf().

Ich hab auch mal als Returnwert eine Struct aus Wert und Fehlerstatus 
verwendet. Sieht aber auch nicht sonderlich praktisch aus.
#6413513
Peter D. schrieb:
> Ich hab auch mal als Returnwert eine Struct aus Wert und Fehlerstatus
> verwendet. Sieht aber auch nicht sonderlich praktisch aus.

Grundsätzlich sollten imho nur Parameter als Argument übergeben werden; 
Ergebnisse werden returned.* Dadurch wird der Code besser wartbar und 
fehlerunanfälliger.

Hat man mehrere Rückgabewerte, dann halt bspw. als struct oder Tuple. 
Für Fehler bieten sich Exceptions an; oder als Rückgabewert in einer 
Variant. Geht es nur um erfolgreich, oder nicht, dann als Optional.

* (Es sei denn, man hat einen guten Grund der dagegen spricht. Es gitb 
ein paar...)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.