Điều này được thừa nhận là một câu hỏi khó tính mà chủ yếu là do tò mò. Giả sử chúng ta có những điều sau đây:Điều gì sẽ xảy ra khi bạn chỉ định hằng số theo nghĩa đen cho tham chiếu rvalue?
int x = 5;
int&& xref = std::move(x);
std::cout << "Before assignment x: " << x << std::endl;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment x: " << x << std::endl;
std::cout << "After assignment xref: " << xref << std::endl;
Kết quả như mong đợi là:
// Before assignment x: 5
// Before assignment xref: 5
// After assignment x: 10
// After assignment xref: 10
này có ý nghĩa. std::move
chuyển đổi x
thành xvalue và cho phép chúng tôi liên kết vị trí bộ nhớ của nó với xref
và sửa đổi nội dung của nó cho phù hợp. Bây giờ cho phép nói rằng chúng ta có những điều sau đây:
int&& xref = 5;
std::cout << "Before assignment xref: " << xref << std::endl;
xref = 10;
std::cout << "After assignment xref: " << xref << std::endl;
int x = 5;
std::cout << "After assignment x: " << x << std::endl;
Đầu ra là bằng trực giác:
// Before assignment xref: 5
// After assignment xref: 10
// After assignment x: 5
này có ý nghĩa tổng thể. Chúng tôi hy vọng có thể liên kết chữ số hằng số 5
thành xref
vì 5
là giá trị chính xác. Chúng tôi cũng hy vọng rằng xref
có thể thay đổi. Chúng tôi cũng hy vọng rằng giá trị của hằng số theo nghĩa đen 5
không thể sửa đổi được (như được hiển thị phần nào về mặt đạo đức trong hai dòng cuối cùng của đoạn mã trên).
Vì vậy, câu hỏi của tôi là, chính xác những gì đang xảy ra ở đây? Làm thế nào để C++ biết không sửa đổi giá trị của hằng số chữ 5
nhưng duy trì danh tính đầy đủ cho xref
để biết rằng nó đã được thay đổi thành 10
bằng cách gán. Biến mới có được tạo khi gán cho xref
khi biến được liên kết với một hằng số không? Câu hỏi này không bao giờ xuất hiện trong C++ 03 vì chỉ có các tham chiếu const có thể bị ràng buộc với các giá trị.
Cảm ơn. Điều này trả lời câu hỏi của tôi và mọi câu hỏi tiếp theo tôi sẽ có. – Klam
@Klam: Tất cả các phần của dịch vụ tại Lightness Industries. –