Warum eine andere Typvariable als Argument eines Parameters des const Referenzparameters in C ++ verwendet werden kann

8
%Vor%

Übergibt y anstelle von const int& legal in C ++

    
xiaofeng z 06.02.2018, 16:12
quelle

2 Antworten

9

Es gibt zwei Faktoren, die es Ihrem Code ermöglichen zu arbeiten. Erstens sind Funktionsargumente bis zu einer impliziten Konvertierung zulässig, wenn sie eine Überlastung abgleichen könnten. Zweitens können const Referenzen an Provisorien binden. Was hier passiert, ist y wird implizit in int konvertiert, wodurch eine temporäre Kopie erstellt wird. v ist dann an dieses temporäre gebunden.

Betrachten Sie das folgende Beispiel:

%Vor%

Sie werden feststellen, dass foo(y) dieselbe Adresse wie y ausgibt, wobei bar(y) eine andere Adresse ausgibt. Dies funktioniert nicht mit const Referenzen. Vor allem, wenn Sie könnten, würde es bedeuten, dass das Ändern von v nicht wirklich y ändern könnte.

    
François Andrieux 06.02.2018 16:20
quelle
3

Ja, das kann ziemlich nervig sein. Die Kompilierung wird aufgrund einer impliziten Konvertierung von y in eine anonyme temporäre int am aufrufenden Standort ausgeführt, und eine const int& -Bindung ist zulässig.

Sie können dies durch Schreiben von

besiegen %Vor%

oder sogar

%Vor%

so alle Überladungen außer der explizit angegebenen werden gelöscht.

    
Bathsheba 06.02.2018 16:31
quelle

Tags und Links