LINUX.ORG.RU

this-> для вызова метода класса

 , ,


1

2

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

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

FIL
()

Приписывай буковку m например, если для себя пишешь, а если не для себя какой нафик холивар, бери больше, тащи дальше.

ilovewindows
()

Зачем писать то, что писать не надо и что никак не помогает?
Если вдруг это очень важно, то методы можешь выделять, скажем, подчёркиванием вначале. Или букву какую добавляй.

Stahl
()

Сам не употребляю и смысла большого не вижу.

Shadow1251
()

Страуструп, кажется, пишет в «специальном издании», что эти два случая (писать и не писать) приведут к идентичному скомпилированному коду.

xoomer
()
Ответ на: комментарий от andreyu

еще для шаблонов

template <typename T>
struct A {
    T member_;
    T &get(  ) { return member_; }
};


template <typename T>
struct B: public A<T> {
    void print(  ) {
        std::cout << this->get( ) << "\n"; // тут, либо A<T>::get( )
    }
};

int main( int argc, const char **argv )
{

    B<int> t;
    t.member_ = 1000;
    t.print( );

    return 0;
}

ossa
()

Этот вопрос не является независимым от других аспектов codestyle. Codestyle следует рассматривать в целом.

Elyas
()
Ответ на: комментарий от panter_dsd

Обращение к методам - это просто вызов функции с неявной передачей this. От того, напишешь ты this->/*this. перед методом или нет, ровным счетом ничего в объектном коде не поменяется.

asaw
()
Ответ на: комментарий от andreyu

В С++ хоть можно написать cl::var = var; вот в жабе в подобном случае this. действительно нужен.

asaw
()

нужно или нет

зависит от «кому»

qulinxao
()

Использую только в случае, если какая-либо локальная переменная или аргумент функции имеет такое же имя, как вызываемая функция-член. А вообще мне даже нравится большая явность, которая получается при использовании this. В некоторых языках вообще нельзя обратиться к собственным переменным/методам без использования self, и ничего, живут люди.

m0rph
()

нашёл где спросить... здесь программисты в красную книгу занесены

шаблоны же, ну

anonymous
()

... и только загромождает кот.

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

mashina
()

хотите - пишите, хотите - нет. на мой взгляд лучше this-> чем m_ и все остальное.

x0r
()

Чтобы раз и навсегда снять проблему разборок «тупоконечников с остроконечниками», выеденного яйца внатуре не стоящую, придумали гайдлайны, которые могут кому-то не нравиться, но он может идти на... другой проект. Кто-то главный на проекте должен бросить монетку и сказать «хорек и никаких сусликов». Если такого нету - это не проект, а кружок анархистов.

slackwarrior 😊😊😊
()
Последнее исправление: slackwarrior (всего исправлений: 1)

Для особо непонятливых (бывают упоротые с ценным мнением) гайдлайны можно зафорсить утилитами проверки типа cppcheck на билдсервере - с условием начала сборки только после успешного прохождения проверки.

slackwarrior 😊😊😊
()

А, вот вспомнил, где видел.

The code generated by the compiler is exactly the same, so you don’t need to use this in such a fashion; occasionally, you’ll see code where people explicitly use this-> everywhere but it doesn’t add anything to the meaning of the code and often indicates an inexperienced programmer

(c) Thinking in C++, Volume 1, 2nd Edition Completed January 13, 2000 Bruce Eckel, President, MindView, Inc.

ossa
()

В интернетах не нашел хорошего холивара по данной теме

Так тебе холивар нужен или аргументированный ответ?

Лично я this-> пишу только если есть опасность путаницы. В остальных случаях не вижу смысла загромождать код.

А так - тебе правильно ответили, в каждом проекте свой стиль, его и надо придерживаться.

hobbit ☕☕☕☕☕
()
Последнее исправление: hobbit (всего исправлений: 1)

Использую this, когда один из аргументов метода называется that или other, или когда рядом есть однотипные сущности (типа otherWindowGeometry, тогда логично будет напиписать this->geometry()).

ilammy
()

Сам не употребляю, большинство колег тоже, но пару раз вступал на грабли с перегруженными свободными функциями(ситуация, когда внезапно появился метод с внешне такой жи сигнатурой, и ты это прощёлкал). Имхо это ССЗБ, по крайней мере, лично меня, это не заставило таки юзать сей синтаксис.

pon4ik
()

Предпочитаю делать вызов методов через указатель this. Ибо это максимально наглядно показывает обращение к методу, а не, скажем, к глобальной функции, что важно. Код должен быть максимально нагляден и исключать если возможно любые вопросы о выполняемом действии. В моей IDE сие даёт удобную автодополняшку, что не важно, но приятно и удобно.

erfea 👍
()
Ответ на: для особо непонятливых от anonymous

И? Как и в случае с бездумным использованием dynamic_cast эти случаи чаще всего говорят о ранее допущенном архитектурном факапе («enjoy your multiple inheritance» (с)), когда нужно выбрать из образовавшейся виртуальной каши нужный метод, который естественным путем (без this) не выбирается. Т.е. ССЗБ и необходимо «поправить в консерватории».

slackwarrior 😊😊😊
()

за использования this в С++, где не попадя, надо жестоко пиздить!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.