Я читал ответы на этот вопрос плюсы и минусы С++ и получил это сомнение при чтении комментариев.
Программистычасто сбивают с толку, что "this" является указателем, но не ссылкой. другая путаница заключается в том, почему "привет" не имеет тип std::string, а оценивает char const * (указатель) (после преобразования массива в указатель) - Johannes Schaub - litb Dec 22 '08 at 1:56
Это только показывает, что он не использует те же соглашения, что и другие (более поздние) языки. - le dorfier дек. 22 '08 в 3:35
Я бы назвал "this" вещь довольно тривиальной проблемой. И, к сожалению, спасибо за ловушку нескольких ошибок в моих примерах поведения undefined.:) Хотя я не понимаю, какая информация о размере имеет отношение к чему-либо в первом. Указателю просто не разрешено указывать внешнюю выделенную память - jalf Dec 22 '08 at 4:18
Является ли это постоянным выводом? - yesraaj Дек 22 '08 в 6:35
это может быть константой, если метод const int getFoo() const; < - в области getFoo, "this" является константой и, следовательно, является readonly. Это предотвращает ошибки и предоставляет определенный уровень гарантии вызывающему, что объект не изменится. - Doug T. Dec 22 '08 в 16:42
вы не можете переназначить "this". т.е. вы не можете сделать "this = & other;", потому что это rvalue. но это тип T *, а не типа T const. т.е. это непостоянный указатель. если вы находитесь в методе const, то это указатель на const. T const. но сам указатель неконст. - Johannes Schaub - litb Dec 22 '08 at 17:53
подумайте о "this" следующим образом: #define this (this_ + 0), где компилятор создает "this_" в качестве указателя на объект и делает "this" ключевое слово. вы не можете назначить "this", потому что (this_ + 0) является rvalue. конечно, не так, как есть (такого макроса нет), но он может помочь понять это - Johannes Schaub - litb 22 дек 2008 в 17:55
Мой вопрос в том, почему this
является указателем a не ссылкой? Любая конкретная причина для его указателя?
Некоторые дополнительные аргументы, почему this
является ссылкой, имеет смысл:
- Рассмотрим
Item 1
изMore Effective C++
: используйте ссылки, когда гарантируется, что у нас есть действительный объект, т.е. не NULL (моя интерпретация). - Кроме того, ссылки считаются более безопасными, чем указатели (потому что мы не можем прикрутить память с помощью блуждающего указателя).
- В-третьих, синтаксис доступа к ссылкам (
.
) немного приятнее и короче, чем доступ к указателям (->
или(*)
).