Có những trường hợp tôi muốn tham chiếu đến một đối tượng nhưng thay vào đó tôi nhận được một bản sao. Dưới đây là một ví dụ:Khi nào và tại sao tôi nhận được bản sao khi khởi tạo tham chiếu?
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;
này tạo ra:
foo: hello 5
bar: hello 5
foo: hello 7
bar: hello 5
Vì vậy, rõ ràng là một bản sao của foo
đã được tạo ra trong khi cú pháp gợi ý (với tôi ít nhất) mà các lập trình viên muốn có một tham chiếu đến nó . Điều này vi phạm nguyên tắc rằng tham chiếu phải là bí danh cho một điều gì đó. Sẽ thật tuyệt nếu ai đó có thể giải thích những gì đang diễn ra và tại sao.
(Lưu ý: Tôi đã xem qua này here)
Các loại khác nhau. – Borgleader