Dieser Code wird in VS2010 nicht kompiliert. Er gibt den Fehler C2440 aus: 'argument': kann nicht von 'A' in 'A & amp;' umwandeln, aber nach 12.8p2 im Standard ist A::A(A&)
ein gültiger Kopierkonstruktor und a
ist ein lvalue im Ausdruck A b = foo(a);
in main()
.
Ich würde sagen, es kommt darauf an, von welchem Standard man spricht. Nehmen wir C ++ 11 an, dann ist es in Ordnung, dass es in Ordnung sein sollte und folgendes Ergebnis liefern sollte:
%Vor%Wie Sie darauf hinweisen, dass das a, das in foo übergeben wird, ein lvalue ist. Der Rückgabewert von foo ist jedoch ein rvalue und sollte daher entweder const A & amp; Kopieren Sie den Konstruktor (nicht vorhanden) im Fall pre C ++ 11 oder den Konstruktor move im Fall C ++ 11.
Tags und Links c++ copy-constructor