2010-10-15 16 views
8

Tôi hiện đang làm mới các kỹ năng C++ của mình và tự hỏi liệu có thể gán điều gì đó cho *this hay không. Tôi biết chỉ định cho this bị cấm, nhưng không thể tìm thấy thông tin tương tự cho trường hợp của tôi.Có được phép gán cho một tham chiếu này (* này) không?

Một ví dụ:

class Foo { 
    int x; 
public: 
    Foo(int x) : x(x) {} 
    Foo incr() { return Foo(x+1); } 
    void incr_() { (*this) = incr(); } 
}; 

Edit: chỉnh incr() 's kiểu trả về từ void để Foo.

Trả lời

2

void incr() { return Foo(x+1); }

Điều này không hợp lệ. Bạn không thể trả lại đối tượng Foo từ một hàm có loại trả về void.

void incr_() { 

    (*this) = incr(); // This invokes Foo& operator = (const Foo&) (compiler synthesized) 
} 

Điều này là tốt.

+3

Điều này sẽ phù hợp hơn làm nhận xét hơn là câu trả lời, IMO. –

+1

@Etienne: Hãy hoàn thành câu trả lời của tôi trước. ':)' –

+1

Bạn hoàn toàn đúng, nhưng tôi đơn giản mắc lỗi ở đó. Tôi có nghĩa là hàm là 'Foo incr()'. – Kolja

4

Có, nó được cho phép, và nó thực sự gọi nhà điều hành nhiệm vụ của bạn.

0

Có, bạn có thể, nếu *this giá trị trả về là một kiểu dữ liệu có toán tử gán được xác định.

1

Có, nó hoạt động. Và *this = x chỉ là cú pháp đường cho operator=(x).

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