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