Đương nhiên, điều này sẽ không biên dịch:Các số có thể thay đổi được hay không?
int &z = 3; // error: invalid initialization of non-const reference ....
và điều này sẽ biên dịch:
const int &z = 3; // OK
Bây giờ, hãy xem xét:
const int y = 3;
int && yrr = y; // const error (as you would expect)
int && yrr = move(y); // const error (as you would expect)
Nhưng những dòng này tới làm biên dịch đối với tôi . Tôi nghĩ nó không nên.
int && w = 3;
int && yrr = move(3);
void bar(int && x) {x = 10;}
bar(3);
Hai dòng cuối cùng có cho phép sửa đổi 3 chữ cái không? Sự khác nhau giữa 3
và const int là gì? Và cuối cùng, có nguy hiểm nào với việc 'sửa đổi' các chữ?
(g ++ - 4.6 (GCC) 4.6.2 với -std=gnu++0x -Wall -Wextra
)
Để trả lời câu hỏi của riêng tôi: Trong 'di chuyển (3)' có thể 3 được sao chép trước tiên để tạo một tạm thời int sẽ bị hủy ở cuối câu lệnh. Đây có phải là lời giải thích? –
Trong tuyên bố thứ hai của bạn: const &z = 3; bạn thiếu trình chỉ định loại. vì vậy nó không biên dịch. –
Cảm ơn, @CJohnson, tôi thường sao chép và dán mã làm việc tại đây. Nhưng tôi đã bất cẩn với một lớp lót đó! –