Tôi đã đọc câu trả lời cho câu hỏi này C++ pros and cons và nhận được sự nghi ngờ này khi đọc nhận xét.Tại sao 'this' là một con trỏ chứ không phải là một tham chiếu?
người lập trình thường thấy khó hiểu rằng "đây" là con trỏ chứ không phải là tham chiếu. một sự nhầm lẫn khác là lý do tại sao "hello" không phải là loại std :: string nhưng đánh giá thành char * (con trỏ) (sau khi chuyển đổi mảng sang con trỏ) - Johannes Schaub - litb Dec 22 '08 at 1:56
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 Dec 22 '08 at 3:35
Tôi gọi điều này là một vấn đề khá tầm thường. Và oops, cảm ơn vì đã bắt được một vài lỗi trong ví dụ về hành vi không xác định của tôi. :) Mặc dù tôi không hiểu những thông tin về kích thước đã làm với bất cứ điều gì trong lần đầu tiên. Một con trỏ đơn giản là không được phép trỏ ra ngoài bộ nhớ được cấp phát - jalf Dec 22 '08 at 4:18
Đây có phải là một nhà thơ không ngừng? - yesraaj Ngày 22 tháng 12 năm 2008 tại 6:35
điều này có thể không đổi nếu phương thức là const int getFoo() const; < - trong phạm vi của getFoo, "this" 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. Dec 22 '08 at 16:42
bạn không thể gán lại "điều này". tức là bạn không thể thực hiện "this = &other;", bởi vì đây là một giá trị. nhưng đây là loại T *, không thuộc loại T const. tức là một con trỏ không liên tục. nếu bạn đang ở trong một phương thức const, thì đó là một con trỏ đến const. T const. nhưng con trỏ chính nó là nonconst - Johannes Schaub - litb Dec 22 '08 at 17:53
nghĩ về "this" như sau: # define this (this_ + 0) trong đó trình biên dịch tạo "this_" như một con trỏ đến đối tượng và tạo từ khóa "này". bạn không thể gán "this" vì (this_ + 0) là một giá trị. tất nhiên đó không phải là cách nó được (không có vĩ mô như vậy), nhưng nó có thể giúp hiểu nó - Johannes Schaub - litb 22 tháng 12 '08 tại 17:55
Câu hỏi của tôi là, tại sao this
là một con trỏ một không phải là một tham chiếu? Bất kỳ lý do cụ thể để làm cho nó một con trỏ?
Một số lập luận thêm lý do tại sao this
được một tài liệu tham khảo sẽ có ý nghĩa:
- Hãy xem xét
Item 1
từMore Effective C++
: sử dụng tài liệu tham khảo khi nó được đảm bảo rằng chúng tôi có một đối tượng có giá trị tức là không phải là một NULL (giải thích của tôi) . - Hơn nữa, tham chiếu được coi là an toàn hơn con trỏ (vì chúng tôi không thể vít bộ nhớ lên bằng con trỏ lạc).
- Thứ ba, cú pháp truy cập tài liệu tham khảo (
.
) hơi đẹp hơn và ngắn hơn so với con trỏ truy cập (->
hoặc(*)
).
Vì vậy, mọi người có thể thực hiện các hacks xấu xí như void foo :: something() {if (this) stuff(); }} – paulm
@paulm "hack" này thực sự sẽ thực hiện điều gì? Không phải 'điều này' luôn luôn đánh giá là' đúng'? – iFreilicht
foo * instance = nullptr; foo-> một cái gì đó(); // Bây giờ nếu (this) == false – paulm