Tôi đang phát xung quanh với các tham chiếu trong C++ và lưu ý một chút hành vi kỳ lạ mà tôi không thể giải thích. Sự hiểu biết của tôi là nếu tôi có biến không phải const và tham chiếu const đến cùng biến đó và sau đó sửa đổi biến không phải const, tham chiếu phải phản ánh sửa đổi đó.thay đổi tham chiếu của const std :: tham chiếu chuỗi
Ví dụ:
void foo() {
int x = 5;
const int& y = x;
x = 10;
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
xuất ra như sau cho tôi:
x = 10
y = 10
Tuy nhiên, nếu tôi thay đổi kiểu để std :: string, tham chiếu const dường như không phản ánh biến được sửa đổi:
void foo() {
std::string x = "abc";
const std::string& y = x;
x = "xyz";
std::cout << "x = " << x << std::endl;
std::cout << "y = " << y << std::endl;
}
sản xuất như sau cho tôi:
x = xyz
y = abc
Đây có phải là hành vi mong đợi bình thường khi thực hiện điều này với chuỗi std :: không? (Tôi đang sử dụng GCC 4.6.0; Tôi không có bất kỳ trình biên dịch nào khác có sẵn tại thời điểm này, vì vậy tôi không biết nếu điều này chỉ xảy ra với phiên bản cụ thể này hay không.)
Đó là mã biên dịch với * g ++ - mp-4.6 (GCC) 4.6.0 20.100.814 * in 'xyz' hai lần, tôi đã cố gắng trong mức tối ưu hóa khác nhau . Bạn đã sao chép * mã chính xác chưa? –
Hoạt động như mong đợi đối với tôi. ("xyz \ nxyz \ n"). Điều này khiến tôi tin rằng có lỗi BCAK hoặc lỗi sao chép và dán. Vui lòng kiểm tra mã của bạn và đăng phiên bản đầy đủ của mã (** sử dụng sao chép và dán **). –
Cảm ơn tất cả mọi người vì thông tin. Tôi đã làm cho nó hoạt động theo cách tôi mong đợi bằng cách sao chép-dán vào một tập tin khác. Khi tôi xem bản gốc ở chế độ nhị phân, đã có rất nhiều byte không liên quan ẩn trước dấu "&" trong tuyên bố của tôi mà tôi chỉ có thể đoán được bằng cách nào đó gây ra rắc rối. Tôi không biết làm thế nào nó thậm chí biên dịch như thế. Nhưng cảm ơn tất cả mọi người đã giúp tôi với điều này. Tất cả các bạn đều tuyệt vời! – Bobby