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
может быть также проверяемой переменной.