Есть случаи, когда я хочу ссылку на объект, но вместо этого получаю копию. Вот пример:
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;
Это дает:
foo: hello 5
bar: hello 5
foo: hello 7
bar: hello 5
Итак, по-видимому, была создана копия foo
, в то время как синтаксис предлагает (по крайней мере, мне), что программист хотел получить ссылку на него.
Это нарушает принцип, согласно которому ссылка должна быть псевдонимом чего-то. Было бы здорово, если бы кто-нибудь мог объяснить, что происходит и почему.
(Примечание: я столкнулся с этим здесь)