Я читав відповіді на це питання «за» і «проти» C ++ і мав це сумніви під час читання коментарів.
програмісти часто вважають заплутаним, що "це" є вказівником, але не посиланням. чергова плутанина, чому "привіт" не типу std :: string, але оцінює до char const * (покажчик) (після перетворення масиву в покажчик) - Йоханнес Шауб - litb 22 грудня08 в 1:56
Це лише показує, що він не використовує ті самі умови, що й інші (пізніші) мови. - le dorfier 22 грудня08 р. О 3:35
Я б назвав цю річ досить тривіальною проблемою. І ой, дякую, що ви виявили кілька помилок у моїх прикладах невизначеної поведінки. :) Хоча я не розумію, яка інформація про розмір пов'язана з будь-чим у першому. Вказівник просто не дозволяється вказувати поза виділеною пам’яттю - jalf 22 грудня 2008 р. О 4:18
Це постійний покажчик? - yesraaj 22 грудня08 р. О 6:35
це може бути постійним, якщо метод const int getFoo () const; <- в області getFoo "це" є постійним, і тому читається тільки. Це запобігає помилкам і надає певний рівень гарантії абоненту, що об'єкт не зміниться. - Дуг Т. 22 грудня08 року о 16:42
ви не можете перепризначити "це". тобто ви не можете робити "this = & other;", тому що це оцінка. але це типу T *, а не типу T const. тобто це непостійний покажчик. якщо ви використовуєте метод const, то це вказівник на const. Т const. але сам вказівник є непересічним - Йоганнес Шауб - litb 22 грудня 088 о 17:53
подумайте про "це" приблизно так: #define this (this_ + 0), де компілятор створює "this_" як вказівник на об'єкт і робить "this" ключовим словом. ви не можете призначити "це", тому що (this_ + 0) є оцінкою. звичайно, це не так, як це є (немає такого макросу), але це може допомогти зрозуміти це - Йоханнес Шауб - litb 22 грудня08 о 17:55
Моє запитання: чому this
вказівник не є посиланням? Якась конкретна причина для того, щоб зробити його вказівником?
Ще кілька аргументів, чому this
бути посиланням, має сенс:
- Поміркуйте
Item 1
зMore Effective C++
: використовуйте посилання, коли гарантується, що у нас є дійсний об'єкт, тобто не NULL (моя інтерпретація). - Крім того, посилання вважаються більш безпечними, ніж покажчики (тому що ми не можемо накрутити пам'ять за допомогою бродячого вказівника).
- По-третє, синтаксис доступу до посилань (
.
) трохи приємніший і коротший, ніж доступ до покажчиків (->
або(*)
).
_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const { return this == NULL ? NULL : m_hWnd; }
this
завжди оцінюєтьсяtrue
?