2012-02-02 40 views
9
này

Tôi cố gắng tìm địa chỉ của this con trỏ, nhưng mã này được thể hiện một lạ lỗi:địa chỉ của

#include <iostream> 
using namespace std; 
class Base 
{ 
    public: 
     void test() 
     { 
      void *address_of_this =&this; 
      cout<<address_of_this<<endl; 
     } 
}; 

int main() 
{ Base k; 
    k.test(); 

    return 0; 
} //error non-lvalue in unary'&' 

bạn có thể giải thích lỗi này?
Ngoài ra, điểm bất hợp pháp trong việc lấy địa chỉ của this là gì?

+0

Thử thêm dấu cách sau dấu = – Alexander

Trả lời

20

this là một con trỏ chứa địa chỉ cho "đối tượng hiện tại". Nó không phải là một biến được lưu trữ ở đâu đó (hoặc thậm chí có thể được thay đổi), nó là một từ khóa đặc biệt với các thuộc tính này.

Như vậy, việc lấy địa chỉ của nó không có ý nghĩa. Nếu bạn muốn biết địa chỉ của "đối tượng hiện tại", bạn có thể chỉ đơn giản là kết quả:

std::cout << this; 

hoặc cửa hàng như

void* a = this; 
+2

Cuối cùng .. tiếng nói của lý do. – Mankarse

+6

Trong tiêu chuẩn: 'this' là một rvalue (và không thuộc loại lớp), do đó, nó không có địa chỉ. –

+0

Trong Standardese một lần nữa, 'this' là _prvalue_ - _pure-rvalue_. – Xupicor

7

Trích dẫn cáC++ chuẩn 2003 C:

5.1 [expr.prim] The keyword this names a pointer to the object for which a nonstatic member function (9.3.2) is invoked. ... The type of the expression is a pointer to the function’s class (9.3.2), ... The expression is an rvalue.

5.3.1 [expr.unary.op] The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue or a qualified_id.

Để đặt đơn giản là, & yêu cầu một giá trị. this là một giá trị, không phải là một giá trị, giống như thông báo lỗi cho biết.

Các vấn đề liên quan