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