this->member VS member в C++

Какая разница между этим:

int MyClass::getId() {
    return this->id;
}

и это:

int MyClass::getId() {
    return id;
}

в С ++?

3 ответа

Решение

Первый пример ограничивает область, в которой имя "id" ищется членами класса MyClass.

второй пример - нет.

Это имеет значение, если, например, MyClass не имеет члена "id", или если текущий метод имеет локальную переменную или параметр с тем же именем.

Это зависит от контекста. Примеры:

template <typename> struct X { int a; };

int b;

template <typename T> struct Foo : X<T> {
    int f() {
        return this->a;    // OK
        // return a;       // Error
    }

    int g() {
        // return this->b; // Error
        return b;          // OK
    }
};

Предполагая, что ваш класс имеет переменную-член с именем id, нет никакой разницы. Даже если у вас есть глобальный id переменная, переменная-член всегда имеет приоритет.

Ваш следующий вопрос: так почему же существует this ключевое слово?

Есть некоторые ситуации, которые вам абсолютно необходимы.

Например, вы хотите, чтобы функция возвращала указатель / ссылку (*) на сам объект:

return *this;    //reference
return this;     //pointer

Другое - вы хотите передать это в качестве аргумента функции

some_function(*this);    //reference(&) or value, depends on some_function signature
some_function(this);     //pointer

Может также использоваться в this->idпросто для ясности, просто для следующего человека, читающего код, сразу знайте, что id является компонентом класса, а не глобальным, не имеющим функционального преимущества.

Если вы используете отладчик, this может быть также проверяемой переменной.

Другие вопросы по тегам