Подтвердить что ты не робот

Когда вы должны использовать ключевое слово "this" в С++?

Возможные дубликаты:
Это чрезмерное использование этого в С++ запах кода

Несколько лет назад я привык использовать this- > при доступе к переменным-членам. Я знал, что это не обязательно, но я подумал, что это было более ясно.

Затем, в какой-то момент, я начал предпочитать более минималистический стиль и прекратил эту практику...

Недавно меня спросил один из моих младших сверстников, считал ли я, что это хорошая идея, и я обнаружил, что у меня действительно не было хорошего ответа на мои предпочтения... Это действительно полностью стилистический выбор или существуют ли реальные причины, по которым лучше не префикс this- > для доступа к переменным элементам?

4b9b3361

Ответ 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 завершила мой ввод текста для меня. Сохраняет нажатия клавиш и орфографические ошибки.