C++: Rückgabe-Wert einem L-Wert?

Betrachten Sie diesen code:

struct foo
{
  int a;
};

foo q() { foo f; f.a =4; return f;}

int main()
{
  foo i;
  i.a = 5;
  q() = i;
}

Kein compiler beschwert sich darüber, auch das Geräusch. Warum q() = ... Zeile korrekt ist?

  • Wow, gute Frage, +1.
  • Was denkst du, ist falsch an diesem code? q() gibt einen struct und dann weisen Sie einen Wert zu. Was ist falsch mit, dass?
  • Carnegie: Guter Kommentar!
  • Ich denke, dass es sehr fehleranfällig ist, da die Zuordnung Wert, der zurückgegeben Wert in der Regel nichts (außer, wenn operator= macht eine Magie, die wohl schlechte design-Praxis). Ich habe erwartet, dass dies eine Warnung sein, wie nicht mit lokalen Variablen.
  • Johnson: Das weit verbreitete Missverständnis ist, dass Menschen davon ausgehen, dass alles, was Sie können auf der linken Seite der Zuweisung muss ein lvalue. In diesem Fall ist diese Anforderung scheint zu sein, verletzt. Aber in Wirklichkeit gibt es keine solche Vorschrift. Built-in Zuordnung erfordert in der Tat und lvalue auf seine LS, aber überlastet Zuweisung nicht. In diesem Fall haben wir es mit dem überladen, auch wenn es nicht offensichtlich ist.
InformationsquelleAutor John | 2011-05-24
Schreibe einen Kommentar