Also fragte ich this question und ich bastelte um es zu lösen über static_cast
. (Übrigens ist es das Problem zu lösen, ich bin nur nicht sicher, ob ich verstehen, warum.)Was macht static_cast <T> zu einem T &?
Im Code:
vector<int> foo = {0, 42, 0, 42, 0, 42};
replace(begin(foo), end(foo), static_cast<int>(foo.front()), 13);
Ist static_cast
einfach ein R-Wert int
Konstruktion? Was ist der Unterschied zwischen dem, und nur dem Ruf:
replace(begin(foo), end(foo), int{foo.front()}, 13);
EDIT:
Wie static_cast
durch die Antworten gefolgert tut scheint ein R-Wert int
zu konstruieren: http://ideone.com/dVPIhD
Aber diese Code funktioniert nicht auf Visual Studio 2015. Ist das ein Compiler-Fehler? Testen Sie hier: http://webcompiler.cloudapp.net/
Ich habe kein Zitat Standard mich zu sichern, aber ich denke, Sie können '+ foo.front()' eine Kopie des Wertes zu erhalten, anstelle einem Verweis auf das Symbol – KABoissonneault