Tôi đã đọc câu trả lời cho câu hỏi này C ++ ưu và nhược điểm và có nghi ngờ này trong khi đọc các bình luận.
Các lập trình viên thường thấy khó hiểu rằng "cái này" là một con trỏ nhưng không phải là một tham chiếu. một sự nhầm lẫn khác là tại sao "hello" không phải là kiểu std :: string mà là đánh giá thành một char const * (con trỏ) (sau khi chuyển đổi mảng thành con trỏ) - Johannes Schaub - litb ngày 22 tháng 12 '08 lúc 1:56
Điều đó chỉ cho thấy rằng nó không sử dụng các quy ước giống như các ngôn ngữ khác (sau này). - le dorfier ngày 22 tháng 12 năm 08 lúc 3:35
Tôi sẽ gọi điều "này" là một vấn đề khá nhỏ. Và rất tiếc, cảm ơn vì đã bắt được một vài lỗi trong các ví dụ về hành vi không xác định của tôi. :) Mặc dù tôi không hiểu thông tin về kích thước có liên quan gì với cái đầu tiên. Một con trỏ chỉ đơn giản là không được phép chỉ ra bên ngoài bộ nhớ được phân bổ - jalf 22 tháng 12 '08 lúc 4:18
Đây có phải là một nhà thơ không đổi? - yesraaj ngày 22 tháng 12 năm 08 lúc 6:35
điều này có thể là hằng số nếu phương thức là const int getFoo () const; <- trong phạm vi của getFoo, "cái này" là hằng số, và do đó chỉ đọc. Điều này ngăn ngừa lỗi và cung cấp một số mức bảo đảm cho người gọi rằng đối tượng sẽ không thay đổi. - Doug T. ngày 22 tháng 12 năm 08 lúc 16:42
bạn không thể gán lại "cái này". tức là bạn không thể thực hiện "this = & other;", bởi vì đây là giá trị. nhưng đây là loại T *, không phải loại T const. tức là nó là một con trỏ không đổi. nếu bạn đang ở trong một phương thức const, thì đó là một con trỏ tới const. T const. nhưng bản thân con trỏ là nonconst - Johannes Schaub - litb ngày 22 tháng 12 '08 lúc 17:53
hãy nghĩ về "this" như thế này: #define this (this_ + 0) trong đó trình biên dịch tạo "this_" làm con trỏ tới đối tượng và biến "this" thành một từ khóa. bạn không thể gán "cái này" bởi vì (this_ + 0) là một giá trị. tất nhiên đó không phải là như vậy (không có macro như vậy), nhưng nó có thể giúp hiểu nó - Johannes Schaub - litb ngày 22 tháng 12 '08 lúc 17:55
Câu hỏi của tôi là, tại sao this
một con trỏ không phải là một tài liệu tham khảo? Bất kỳ lý do cụ thể để làm cho nó một con trỏ?
Một số tranh luận thêm tại sao this
là một tài liệu tham khảo sẽ có ý nghĩa:
- Xem xét
Item 1
từMore Effective C++
: sử dụng tài liệu tham khảo khi được đảm bảo rằng chúng tôi có một đối tượng hợp lệ, tức là không phải là NULL (cách giải thích của tôi). - Hơn nữa, các tài liệu tham khảo được coi là an toàn hơn con trỏ (vì chúng ta không thể vặn bộ nhớ lên bằng một con trỏ đi lạc).
- Thứ ba, cú pháp để truy cập tài liệu tham khảo (
.
) đẹp hơn một chút và ngắn hơn so với truy cập con trỏ (->
hoặc(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
lúc nào cũng đánh giátrue
?