Ci sono casi in cui voglio un riferimento a un oggetto ma invece ottengo una copia. Ecco un esempio:Quando e perché ottengo una copia durante l'inizializzazione di un riferimento?
std::pair<const std::string, int> foo("hello", 5);
const std::pair<std::string, int> & bar = foo;
std::cout << "foo: " << foo.first << " " << foo.second << std::endl;
std::cout << "bar: " << bar.first << " " << bar.second << std::endl;
foo.second = 7;
std::cout << "foo: " << foo.first << " " << foo.second << std::endl;
std::cout << "bar: " << bar.first << " " << bar.second << std::endl;
Questo produce:
foo: hello 5
bar: hello 5
foo: hello 7
bar: hello 5
Quindi, apparentemente una copia di foo
è stato realizzato, mentre la sintassi suggerisce (almeno per me) che il programmatore ha voluto un riferimento ad esso . Questo viola il principio che un riferimento dovrebbe essere un alias per qualcosa. Sarebbe bello se qualcuno potesse spiegare cosa sta succedendo e perché.
(Nota: Mi sono imbattuto in questo here)
I tipi sono diversi. – Borgleader