J'ai donc demandé this question et j'ai été bricoler avec la résolution via static_cast
. (Soit dit en passant, il ne résout le problème, je ne suis pas sûr si je comprends pourquoi.)Qu'est-ce que static_cast <T> fait à un T &?
Dans le code:
vector<int> foo = {0, 42, 0, 42, 0, 42};
replace(begin(foo), end(foo), static_cast<int>(foo.front()), 13);
Est-ce le static_cast
construire simplement un R-Value int
? Quelle est la différence entre cela et simplement l'appel:
replace(begin(foo), end(foo), int{foo.front()}, 13);
EDIT:
En déduire les réponses static_cast
-t semblent construire un R-Value int
: http://ideone.com/dVPIhD
Mais cette le code et non fonctionne sur Visual Studio 2015. S'agit-il d'un bogue de compilateur? Testez ici: http://webcompiler.cloudapp.net/
Je n'ai pas la citation de toute norme pour me soutenir, mais je pense que vous pouvez utiliser '+ foo.front()' pour obtenir une copie de la valeur, au lieu d'une référence au symbole – KABoissonneault