Есть ли преимущество или повышение производительности с помощью ‘this — & gt;’ ссылаться на членов класса?

Мне было интересно, есть ли какое-то преимущество, если использовать «this» для ссылки на членов класса, а не на использование его в c ++?

например…

class Test
{
public:
Test();
void print_test()
{
std::cout << this -> m_x   // Using 'this'
<< endl;

std::cout << m_x          // Rather than referencing 'm_x' this way
<< endl;
}
private:
int m_x;
int m_y;
};

3

Решение

Нет, разницы в производительности нет. Для компилятора значения идентичны.

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

5

Другие решения

Иногда это просто соглашение.

Основная идея заключается в том, что мы обычно должны использовать this-> чтобы избежать конфликтов имен:

class Value
{
public:
Value(): value(0), valueSet(false) {}

void setValue(int value) {
//value = value; ( WRONG : Naming conflict )
this->value = value; // Use this-> to distinguish between them
valueSet = true;
}

private:
int value;
bool valueSet;
}

Теперь утверждение valueSet = true; без this-> выглядит некрасиво Поэтому люди предпочитают префикс this-> чтобы все выглядело согласованно:

    void setValue(int value) {
this->value = value;
this->valueSet = true; // Isn't this consistent and beautiful?
}

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

PS: Другая возможная причина — возможно, люди просто хотят подчеркнуть, что это поле для членов, а не что-то еще. Поскольку большинство простых редакторов не способны выделять такие поля, это может улучшить читаемость кода.

2

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

Единственная проблема, которая может возникнуть — это неоднозначность имени переменной. Но пока вы используете соглашение префикса (или постфикса) члена с m_ или же _m ты должен быть в безопасности.

Также вы можете увидеть Когда я должен явно использовать указатель `this`?

0

Нет .. В противном случае каждый написал бы такой код.
Может быть, кто-то думал, что это легко читать. Может быть, он был разработчиком Java.

0
По вопросам рекламы [email protected]