48 Stimmen

C++ -- return x,y; Was soll das bringen?

Ich programmiere schon seit ein paar Jahren in C und C++ und nehme jetzt gerade an einem College-Kurs teil, und in unserem Buch gab es eine Funktion wie diese als Beispiel:

int foo(){
  int x=0;
  int y=20;
  return x,y; //y is always returned
}

Eine solche Syntax habe ich noch nie gesehen. In der Tat habe ich noch nie die , Operator außerhalb von Parameterlisten verwendet. Wenn y immer zurückgegeben wird, was ist dann der Sinn? Gibt es einen Fall, in dem eine Return-Anweisung auf diese Weise erstellt werden muss?

(Außerdem habe ich auch C markiert, weil es für beide gilt, obwohl mein Buch speziell C++ ist)

5voto

Joel Rondeau Punkte 7338

So wie jeder, der hier kommentiert, denkt, dass es sinnlos ist, und ich widerspreche nicht, wenn ich mir das Beispiel ansehe, werde ich eine Vermutung anstellen, die nicht viel besser ist:

Der Autor erhielt eine Compiler-Warnung darüber, dass x nicht innerhalb der Funktion verwendet wird, und dies war eine einfache Möglichkeit, die Warnung zu beseitigen.

4voto

florg Punkte 63

Diese Syntax kann verwendet werden, um zusätzliche Scope-Klammern einer if - Erklärung. Normalerweise würden Sie z.B. folgendes schreiben:

if (someThing == true)
{
    a = 1;
    b = 2;
    return true;
}

Dies kann durch Folgendes ersetzt werden:

if (someThing == true)
    return a = 1, b = 2, true;

Ich denke, die Verwendung dieses Codierungsstils ist eher durch den Drang zum Posieren motiviert als durch das Schreiben von sauberem Code.

4voto

Daniel Daranas Punkte 22022

Dies ist die Komma-Operator (,) .

Die beiden Ausdrücke x und y werden ausgewertet. Das Ergebnis des Gesamtausdrucks ist y, d. h. der letztgenannte Wert.

Es ist schwer zu sagen, warum er hier verwendet wird. Ich vermute, zu Demonstrationszwecken. Offensichtlich könnte die Funktion umstrukturiert werden zu:

int foo()
{
  return 20;
}

3voto

Andy White Punkte 83877

Das sieht wie ein schreckliches Beispiel für Code aus. In C/C++ mag es eine gültige Syntax sein, aber ich kann mir keinen Grund vorstellen, warum man das jemals tun sollte.

Wenn Sie sowohl x als auch y zurückgeben möchten, wäre es in C++ besser, eine Klasse oder Struktur "Point" mit x- und y-Eigenschaften zu definieren und diese zurückzugeben. Eine andere Möglichkeit wäre, x und y per Referenz zu übergeben und dann die Werte in der Methode entsprechend zu setzen.

Wenn die Methode nur y zurückgeben soll, würde ich einfach "return y;" sagen. Wenn x vor der return-Anweisung "ausgewertet" werden muss, sollte dies in einer separaten Zeile geschehen.

2voto

David Thornley Punkte 55244

Es gibt keinen Grund für diese Rückgabeanweisung.

Si x wurden erklärt volatile würde es einen Zugriff erzwingen (da zumindest in C++ Verweise auf volatile Variablen werden als extern beobachtbares Verhalten betrachtet), ist es aber nicht.

Wenn anstelle von x Wenn es eine Berechnung mit Nebeneffekten gäbe, würde sie diese Berechnung durchführen und dann Folgendes zurückgeben y . Allerdings ist eine Nicht volatile x hat keine Nebenwirkungen. Die Implementierung ist nicht verpflichtet, Code auszuführen, der keine Seiteneffekte oder ein von außen beobachtbares Verhalten hat. Der Komma-Operator führt aus, was immer auf der linken Seite des Kommas steht, ignoriert das Ergebnis und führt den Wert der rechten Seite aus und behält ihn bei (außer, dass es in diesem Fall frei ist, die linke Seite des Operators zu ignorieren).

Daher ist die return x, y; Anweisung ist genau das Gleiche wie return y; . Si x nicht nur völlig sinnlos wäre, wäre es stilistisch besser, es als x; return y; was genau das Gleiche ist. Auf diese Weise wäre es nicht annähernd so verwirrend.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X