программистов часто смущает, что «this» - это указатель, а не ссылка. Другая путаница заключается в том, что «hello» не относится к типу std :: string, а вычисляется как char const * (указатель) (после преобразования массива в указатель) - Johannes Schaub - litb 22 декабря 2008 г. в 1:56
Это только показывает, что он не использует те же соглашения, что и другие (более поздние) языки. - Le Dorfier Dec 22 '08 в 3: 35
Я бы назвал эту вещь довольно тривиальной проблемой. И, к сожалению, спасибо за обнаружение нескольких ошибок в моих примерах неопределенного поведения. :) Хотя я не понимаю, что информация о размере имеет отношение к чему-либо в первом. Указатель просто не может указывать за пределы выделенной памяти - jalf 22 декабря 2008 г. в 16:18
Это постоянный указатель? - Yesraaj 22 декабря 2008 в 6: 35
это может быть константой, если метод const int getFoo () const; <- в области действия getFoo «this» является константой и поэтому доступно только для чтения. Это предотвращает ошибки и обеспечивает некоторый уровень гарантии для вызывающей стороны, что объект не изменится. - Даг Т. 22 декабря 2008 года в 16: 42 </p>
Вы не можете переназначить «это». Т.е. вы не можете делать «this = & other;», потому что это значение. но это типа T *, а не типа T const. Т.е. это непостоянный указатель. если вы используете метод const, то это указатель на const. T const. но сам указатель неконстантен - Йоханнес Шауб - лит 22 декабря 2008 года в 17: 53
Думайте об «этом» следующим образом: #define this (this_ + 0), где компилятор создает «this_» как указатель на объект и делает «this» ключевым словом. Вы не можете назначить «это», потому что (this_ + 0) является значением. конечно, это не так (такого макроса нет), но это может помочь понять его - Йоханнес Шауб - лит 22 декабря 2008 г. в 17: 55