Есть ли накладные расходы, использующие this-> для доступа к члену? - PullRequest
10 голосов
/ 11 ноября 2010

При доступе к члену какого-либо класса я могу использовать, например ::

this->myVar = 10 

или я могу просто написать:

myVar = 10

Мне нравится использовать this->, потому что он явно объявляет, что переменная является членом этого класса, но вызывает ли это какие-либо издержки по сравнению с простым использованием имени переменной?

В качестве альтернативы я мог бы добавить уникальный префикс к vars, например _TmyVar, но я давно пользуюсь this->, поэтому просто удивляюсь.

Ответы [ 5 ]

37 голосов
/ 11 ноября 2010

Нет накладных расходов.Компилятор сгенерирует одинаковый код для обеих версий.

11 голосов
/ 11 ноября 2010

Эти две строки кода имеют одинаковое значение.this-> подразумевается во второй строке.Они делают одно и то же.

Таким образом, они точно так же работают: -)

8 голосов
/ 11 ноября 2010

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

3 голосов
/ 11 ноября 2010

Мне нравится использовать это-> потому что это явно заявляет, что переменная является членом этого класса, но делает это возникают какие-либо накладные расходы по сравнению с просто используя имя переменной сама

Да, это больше писать, и больше читать, и указывает читателям кода, что он был написан кем-то, кто не знаком с C ++, так что им приходится тратить дополнительное время на тщательную проверку всего. Все это накладные расходы программистов. Это стоит денег.

Однако нет никаких накладных расходов, которые обычно ничего не стоят, эффективности генерируемого машинного кода.

Подводя итог, можно сказать, что есть накладные расходы дорогостоящего вида, а не дешевый / бесплатный.

В качестве альтернативы я мог бы добавить уникальный префикс к переменным, такой как _TmyVar, но я использовал это-> в течение долгого времени, поэтому я просто удивился.

Имена формы _TmyVar, начинающиеся с подчеркивания, за которым следует заглавная буква, зарезервированы для реализации.

Не делай этого.

Двумя наиболее распространенными соглашениями о присвоении имен в C ++ для нестатических элементов данных являются myVar (префикс my) и var_ (суффикс _).

Приветствия и hth.,

0 голосов
/ 11 ноября 2010

Я иногда использую явное this-> в установщиках, поскольку они позволяют мне использовать то же имя для имен параметров, что и для полей экземпляра:

class MyClass 
{
    int foo;
    void setFoo(int foo) 
    {
        this->foo = foo;
    }
}

однако в конструкторах я обычно использую список инициализации, который не требует явного this ->

class MyClass 
{
    int foo;
    MyClass(int foo) : 
        foo(foo) 
    { 
    }
}
...