Хотя это полностью субъективный вопрос, я думаю, что общее сообщество C ++ предпочитает , а не , чтобы иметь this ->
. Он загроможден и совершенно не нужен.
Некоторые люди используют его, чтобы различать переменные-члены и параметры. Гораздо более распространенной практикой является просто префикс ваших переменных-членов чем-нибудь, например, одинарным подчеркиванием или m
, или m_
и т. Д.
Это намного легче читать, на мой взгляд. Если вам нужно this ->
, чтобы различать переменные, вы делаете это неправильно. Либо измените имя параметра (с x
на newX
), либо установите соглашение об именах переменных-членов.
Согласованность предпочтительна, поэтому вместо того, чтобы навязывать это ->
себе для нескольких случаев, которые вам нужно различать (обратите внимание, что в списках инициализаторов это полностью четко определено: ] x (x)
, где член x
инициализируется параметром x
), просто улучшите имена переменных.
Остается единственный раз, когда я использую this
: когда мне действительно нужен адрес экземпляра по какой-либо причине.
Я могу только вспомнить, как делал это с
delete this;
Его можно использовать, когда у вас есть переменные в области «выше» той, с которой вы работаете.
int i;
public void foo() {
int i;
i = 3; // assign local variable
this->i = 4; // assign global variable
}
Помимо доступа к переменным в другой области видимости, я сам согласен с вашим «минималистичным выбором». Меньше - больше. : -)
Мне нравится использовать его для пояснения, например, при доступе к унаследованным элементам. Он напоминает читателю, откуда взялась переменная, если у вас нет соглашения об именах, которое передает эту информацию.
Вы должны использовать этот указатель, когда:
this
в конструктор или установщик) this! = ArgPtr
Лично я никогда не использую это, за исключением:
Когда возникает неоднозначность между, скажем, параметром функции и переменной экземпляра.
Конечно, такой двусмысленности следует избегать! Может быть, предпочтительнее изменить имя параметра функции вместо того, чтобы нести накладные расходы (т.е. префиксы) для всех обращений к параметрам экземпляра, хотя...
Для я, это зависит от обстоятельств. Если это короткая функция или переменная, я просто ввожу ее (например, mCount). Однако в большинстве случаев я использую очень информативные имена переменных-членов и функций (например, mExclusivelyLockedDigitalIOList). В таких случаях я обычно использую указатель this, чтобы Visual Studio IntelliSense завершила набор текста за меня. Экономия на нажатиях клавиш и орфографических ошибках.