Kasten 1)
m
als Funktion return my
und nehmen keine Argumente interpretiert. Um zu sehen, die erwartete Ausgabe entfernen ()
d.h verwenden my m;
Fall 2)
Das ist etwas besser als die „drängendsten Parsen“ bekannt.
n
wird als eine Funktion interpretiert, die my
zurückgibt, die ein Argument vom Typ Zeiger an die Funktion my
zurücknimmt, die keine Argumente nimmt.
Um die erwartete Ausgabe in diesem Fall versuchen my n((my()));
[Statt der Behandlung als Argument Spezifikation wie im ersten Fall würde der Compiler nun als Ausdruck interpretiert wegen der zusätzlichen ()
] siehe
Meiner Interpretation:
my n((my()))
entspricht my n = my()
. Nun ist die rvalue Ausdruck my()
schafft eine temporäre [dh einen Aufruf der Standard-Konstruktor] und n
wird Kopie an diesem temporären Objekt initialisiert [ohne Aufruf der Kopie-Ctor wegen einiger compiler optimization]
PS: Ich bin nicht 100% sicher über den letzten Teil meiner Antwort. Korrigiere mich, wenn ich falsch liege.
Es heißt nicht RVO, aber es ist in der Tat eine allgemeine Optimierung. – MSalters
@MSalters: Ja, ich denke, das ist eine Variante von RVO. :) –