Как правило, это вопрос местных соглашений.В большинстве мест, которые я видел, не используется this->
, кроме случаев, когда это необходимо, и это соглашение, которое я предпочитаю, но я слышал о людях, которые предпочитают использовать его систематически.
Есть дваслучаи, когда это необходимо.Во-первых, если вы скрыли имя с тем же именем в локальной области видимости;например, если у вас есть член с именем toto
, и вы также назвали аргумент своей функции toto
.Многие соглашения о кодировании помечают либо элемент, либо его аргументы, чтобы избежать этого случая, например, все имена элементов начинаются с my
или m_
, или имя параметра начинается с the
.
Другой случай состоит в том, чтоthis->
можно использовать в шаблоне, чтобы сделать имя зависимым.Это актуально, если шаблонный класс наследует от зависимого типа, и вы хотите получить доступ к члену базы, например:
template <typename T>
class Toto : public T
{
public:
int f()
{
return this->g();
}
};
Без this->
здесь g()
будет независимое имя, и компилятор будет искать его в контексте определения шаблона, не принимая во внимание базовый класс.