Nó là không thể để cung cấp một "tuyên ngôn" cho this
. Không có cách nào để "tuyên bố" một rvalue trong C + +. Và this
là một giá trị, như bạn đã biết.
Độ chính xác và tỷ lệ rvalueness là các thuộc tính của các biểu thức tạo ra các giá trị này, chứ không phải thuộc tính của khai báo hoặc đối tượng. Về vấn đề đó, người ta thậm chí có thể lập luận rằng nó không thể tuyên bố một lvalue hoặc. Bạn khai báo một đối tượng. Lvalue là cái được tạo ra khi bạn sử dụng tên của đối tượng đó như là một biểu thức. Trong ý nghĩa đó, cả hai "tuyên bố một rvalue" và "để tuyên bố một lvalue" là biểu thức oxymoron.
Câu hỏi của bạn dường như cũng gợi ý rằng các thuộc tính "là một khoản hoa hồng" và "tạm thời" được bổ sung bằng cách nào đó, tức là mọi thứ được cho là một giá trị hoặc tạm thời. Trong thực tế, tài sản "tạm thời" không có kinh doanh ở đây. Tất cả các biểu thức là một trong hai giá trị hoặc giá trị. Và this
xảy ra là một rvalue.
Mặt khác, thời gian có thể được coi là giá trị hoặc theo giá trị, tùy thuộc vào cách bạn truy cập tạm thời.
P.S. Lưu ý, BTW, rằng trong C++ (như trái ngược với C) chức năng bình thường là lvalues.
Bắt buộc 'try {this = madness; } catch (...) {this = sparta; } ' – corsiKa
Không quan tâm, trình biên dịch nào cung cấp cho bạn thông báo này? –
@Oli: Nếu mã được thay đổi thành 'this = (A *) 0x12341234;', VC++ reports "* toán hạng bên trái phải là l-value *" - loại tương tự. – ildjarn