2010-11-05 44 views
9

thể trùng lặp:
Why 'this' is a pointer and not a reference?Tại sao đây là một con trỏ

Tại sao this một con trỏ, tài liệu tham khảo chứ không phải rhan? Nó có thể là NULL không?

+0

Nó có thể là rỗng. Hãy tưởng tượng trường hợp khi một phương thức * không ảo * được gọi khi ... tốt, NULL :-) Điều này có thể là tốt trong lĩnh vực C++ UB, nhưng tôi đã thấy nó xảy ra trước đó. –

+0

Bản sao chính xác của [Tại sao 'này' là một con trỏ chứ không phải là tham chiếu?] (Http://stackoverflow.com/questions/645994/why-this-is-a-pointer-and-not-a-reference) và một số câu hỏi khác. –

+3

@pst: Vâng, điều đó sẽ tốt trong lĩnh vực hành vi không xác định. –

Trả lời

7

Tại sao "này" không phải là tham chiếu?

Xem Bjarne của câu trả lời here

Bởi vì "này" đã được giới thiệu vào C++ (thực sự vào C với các lớp) trước khi tài liệu tham khảo đã được thêm vào. Ngoài ra, tôi đã chọn "này" để theo dõi việc sử dụng Simula, thay vì sử dụng Smalltalk (sau này) của "self".

2

Tại sao là this con trỏ?

Vì đó là, và nó chỉ là cách ngôn ngữ lập trình được thiết kế. (Tôi nghĩ rằng nó cũng là bởi vì nó đã được còn lại từ C, nhưng tôi không chắc chắn).

thay vì tham chiếu?

Nếu bạn cần tham chiếu này, hãy sử dụng *this.

Nó có thể không bao giờ là NULL?

... no. Lam thê nao điêu đo co thể?

+2

đó là một câu hỏi hợp lý - nếu nó không bao giờ có thể được null hoặc phân công lại tại sao nó không phải là một tham chiếu? –

+0

tại sao nó không thể là một con trỏ? Không có lợi thế nào là do chuyển đổi giữa một ký tự (* hoặc &). –

+0

@AlexanderRafferty Bởi vì cách C++ đang truyền tham chiếu. – asaelr

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