Es gibt Fälle, wenn ich einen Verweis auf ein Objekt möchte, aber stattdessen bekomme ich eine Kopie. Hier ist ein Beispiel:Wann und warum bekomme ich beim Initialisieren einer Referenz eine Kopie?
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;
Dies erzeugt:
foo: hello 5
bar: hello 5
foo: hello 7
bar: hello 5
So offenbar eine Kopie foo
erstellt wurde, während die Syntax (für mich zumindest) schlägt vor, dass der Programmierer einen Verweis darauf wollte . Dies verstößt gegen das Prinzip, dass eine Referenz ein Alias für etwas sein sollte. Es wäre großartig, wenn jemand erklären könnte, was vor sich geht und warum.
(Anmerkung: I kam in diesem here)
Die Typen sind unterschiedlich. – Borgleader