Tôi cảm thấy câu hỏi này đủ cơ bản để có mặt ở đâu đó, nhưng dường như tôi không thể tìm ra câu trả lời cho nó.Khai báo một tham chiếu đến đối tượng và toán tử gán
Giả sử tôi có mã này:
//class member function
std::map< std::string, std::string > myMap;
const std::map< std::string, std::string >& bar()
{
return myMap;
}
void myFunc(std::map< std::string, std::string >& foo1)
{
foo1 = bar();
std::map< std::string, std::string >& foo2 = bar();
}
hiểu biết của tôi là nếu tôi bắt đầu sử dụng foo2, vì foo2 là một tham chiếu đến các trường hợp tương tự như những gì bar() trả về, bất cứ điều gì tôi làm với foo2 sẽ được phản ánh trong myMap. Nhưng còn foo1 thì sao? Foo1 có nhận được một bản sao của myMap hay không nó cũng trỏ đến cùng một ví dụ như những gì bar() trả về? Thư viện chuẩn C++ nói rằng toán tử gán cho std :: map sẽ sao chép các phần tử trên, nhưng điều đó có nghĩa là toán tử gán không thực sự được gọi trong khai báo của foo2?
Cảm ơn!
+1 Cảm ơn bạn, tôi đã học được điều gì đó mới mẻ. Tôi vừa thực hiện một thử nghiệm và tôi thực sự hoàn toàn là 100% WRONG và bạn đúng = -) – flumpb
Ok tuyệt vời! Cảm ơn, những gì tôi thực sự cần biết là toán tử gán được gọi trong foo1 và không được gọi trong foo2. Lời giải thích tuyệt vời, cảm ơn! – bhh1988
@Luc Nếu có thể, bạn có thể đi qua tại sao các biến tham chiếu thường không được sử dụng?Tôi có một sự hiểu biết tốt hơn về những gì họ đang có (nhờ câu trả lời của bạn) nhưng có vẻ như lập trình viên thường ủng hộ con trỏ trên nó. Nó là sự dư thừa? Phạm vi giới hạn? –