Weird C ++ Vorlage & const Problem

7

Ich verstehe nicht, warum die Ausgabe dieses Programms Zweite Methode anstelle von Erste Methode ...

ist %Vor%

Allerdings, wenn ich meine Hauptfunktion zu dieser ändern:

%Vor%

Die Ausgabe ist Erste Methode . Irgendwelche Ideen?

    
Andrzej 16.09.2011, 07:28
quelle

2 Antworten

15
%Vor%

Das Ergebnis von a + b ist ein rvalue-Ausdruck vom Typ A , der ein temporäres erzeugt und nicht an eine nicht-konstante Referenz binden kann, sodass es die const -Überladung übernimmt wie Sie eine Const-Referenz an eine temporäre binden können.

%Vor%

In diesem Fall ist der Teilausdruck c ein lvalue-Ausdruck und Sie dürfen eine nicht-konstante Referenz binden. Da die nicht konstante Version in diesem Fall eine perfekte Übereinstimmung mit T=A darstellt, wird sie der const-Überladung vorgezogen, die eine Konvertierung im zweiten Argument von einem lvalue vom Typ A erfordern würde const lvalue vom Typ A .

    
David Rodríguez - dribeas 16.09.2011, 07:39
quelle
5

&t2 in Ihren Funktionen nimmt eine Referenz.

Allerdings kann a+b nicht an eine normale Referenz gebunden werden, daher muss sie als const Referenz übergeben werden.

In Ihrem zweiten main übergeben Sie einen richtigen lvalue, so dass er von der Funktion modifiziert werden kann (und daher kann const die Bedeutung ändern).

Das ist zumindest meine Vermutung.

    
mange 16.09.2011 07:33
quelle

Tags und Links