Есть ли накладные расходы, используя это - > в C++?

У меня есть класс, и если я хочу ссылаться на переменную-член из функции-члена, я мог бы написать:

это - >myVar = 10 / / например

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

myVar = 10

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

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

заранее спасибо, том.

6 ответов


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


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

таким образом, они выполняют то же самое :-)


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


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

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

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

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

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

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

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

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

Cheers & hth.,


компилятор будет делать то же самое в данной ситуации.

В общем случае оператор -> может нести очень небольшие накладные расходы, потому что он требует поиска ссылки. Компиляторы умны, поэтому не беспокойтесь об их использовании.


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

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

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

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