Ich frage vielleicht eine dumme Frage, aber ich schaute auf die Wikipedia-Seite für RVO here und konnte nicht aufhören zu fragen, ob dieses Verhalten falsch ist. Ich habe es in meiner Maschine ausprobiert und RVO ist trotz Optimierungslevel voll eingeschlagen. Was ist, wenn es tatsächlich etwas gab BIG in einem Konstruktor? Ich weiß es sollte nicht, aber was wäre wenn? Ich kann nicht verstehen, warum RVO immer noch passieren würde, wenn es im Konstruktor Nebenwirkungen gibt.Ist die Rückgabewertoptimierung (RVO) kein Fehler?
EDIT: -fno-elide-constructors
scheint RVO zu stoppen. Aber die Frage bleibt.
EDIT2: Auf eine ernstere Notiz, wie viele Menschen wissen über so etwas? Es ist vielleicht im Standard, aber es ist immer noch ein wirklich hässliches Feature, wie ich es sehe. Zumindest sollten Compiler es standardmäßig deaktivieren und einen Switch für Leute bereitstellen, die davon wissen. :)
EDIT 3: Ich bestehe immer noch darauf, dass das wirklich schlecht ist. :). Ich glaube nicht, dass ich eine andere sprachliche Einschränkung kenne, die direkt gegen die Syntax der Sprache spricht. Alles andere wirft entweder Compiler- oder Linker-Fehler oder?
persönlich weggelassen werden, ich denke, dass RVO ist eine Abscheulichkeit. –
Können Sie einen brauchbaren Anwendungsfall für nicht-schädliche Nebenwirkungen in einem Kopierkonstruktor finden? Ich habe keine, keine Hand. Sie werden im Allgemeinen hinter den Kulissen genannt, und es ist wirklich leicht, einen Fehler zu machen, wenn man sich bestimmt, wann sie angerufen werden. Das ist für mich ein guter Grund, die Nebenwirkungen auszulassen. –
Ich habe keinen Grund, Nebenwirkungen in einen Kopierkonstruktor zu legen. :) – nakiya