Ein Klassenobjekt mit einem trivialen Kopierkonstruktor übergeben, aber keine Ausgabe?

8

Ich habe dieses Programm mit GCC und Clang probiert, aber beide geben nichts aus

%Vor%

Laut meiner Standardausgabe sollte dieses Programm "copied!" ausgeben. Kann mir jemand sagen, ob ich mich irre oder ob das ein Fehler in diesen beiden Compilern ist?

    
Johannes Schaub - litb 04.11.2012, 03:20
quelle

1 Antwort

3

Es scheint, dass Sie das Verhalten erwarten, das der Standard definiert.

Template-Funktionen verhindern nicht die Erstellung von Kopierkonstruktoren / Zuweisungsoperatoren. Template-Funktionen verhindern also nicht, dass eine Klasse als "trivial copyable" betrachtet wird. Allerdings nehmen sie an der Überladungsauflösung teil, wenn es an der Zeit ist, sie tatsächlich zu kopieren, damit sie eingreifen können. Und da a in diesem Beispiel ein nicht-konstanter l-Wert ist, passt es besser zur Signatur A(A&) als es A(const A&) tut. Also ruft es die Template-Funktion auf.

(Obwohl, warum Sie sich nicht die Mühe gemacht haben, all das in Ihrer Frage zu erklären, entzieht sich mir, da Sie offensichtlich Ihre Nachforschungen angestellt haben.)

Wenn ich jedoch bedenke, wie klein ein solcher Fall ist, würde ich nicht davon ausgehen, dass dieses Verhalten dazu führt, dass trivial kopierbare Klassen nicht trivial kopiert werden.

    
Nicol Bolas 04.11.2012 04:00
quelle