@ProCxx

Страница 807 из 2477
Sergey
21.04.2017
23:41:25
он подчеркивает именно переменную m_flags

которую я тут value обозвал

Alex Фэils?︙
21.04.2017
23:41:48
скорее всего, семантика решарпера бажит, и думает ,что вал не инициализирован внутри конструктора

Alexander
21.04.2017
23:41:57
репорти багу - решарпер неправ

Google
Sergey
21.04.2017
23:43:54
а еще вот такая штука. если в конструкторе класса зовется виртуальная функция из этого же класса - идет такой ворнинг

что-то вроде virtual function will be resolved statically

Vladislav
21.04.2017
23:44:27
а вот тут он прав

Sergey
21.04.2017
23:44:37
показал коллегам - они говорят, вообще нельзя вызывать виртуальные функции в конструкторе

как оно обстоит дело

Vladislav
21.04.2017
23:45:21
формально можно, но это как себе по ногам стрелять - не рекомендуется

Sergey
21.04.2017
23:45:52
идем дальше

нашелся участок, где виртуальная функция вызывалась в декструкторе

тот же самый ворнинг. коллеги сказали - ерунда, в деструкторе все норм

но неуверенно

предположили, что может у них там для симметрии в решарпере так сделали. один ворнинг на ctor/dtor

Artem
21.04.2017
23:47:31
Нет, и там и там логика одна и та же, это будет реализация функции из этого класса

Google
Vladislav
21.04.2017
23:47:39
в деструкторе тоже не норм - на момент выполнения деструктора базового класса дети уже задестракчены

Artem
21.04.2017
23:47:41
Не из сына

Alexander
21.04.2017
23:48:21
это подходит. но это не ошибка?
ну так это варнинги, а не ошибки

Vladislav
21.04.2017
23:48:22
обычно - ошибка

Sergey
21.04.2017
23:48:22
т.е. все же работает прекрасно. высказали мнение, что под другим комплилятором может и не работать

Vladislav
21.04.2017
23:48:40
в том смысле что так делать в продакшн-коде опасно

Sergey
21.04.2017
23:49:16
случай-то нифига не искуственный

Artem
21.04.2017
23:49:17
Нет, дело в том, что когда ты пишешь вызов виртуальной функции, ты можешь ожидать, что вызовется перегруженная

И это предупреждение

Sergey
21.04.2017
23:49:41
вот представьте, что нужно перед удалением класса выполнить некий deinit

Artem
21.04.2017
23:49:47
Сродни предупреждению if(a = b)

Sergey
21.04.2017
23:49:48
и он виртуальный

Artem
21.04.2017
23:50:04
Этот код не ошибка, но подозрительный

Sergey
21.04.2017
23:50:11
ну и как? заставить пользователя писать cl->deinit; delete cl;

Artem
21.04.2017
23:50:48
и он виртуальный
А почему он виртуальный?

Sergey
21.04.2017
23:51:05
а потому что есть 2 реализации. под d3d и openGL

deinit выполняет совершенно разные действия

Artem
21.04.2017
23:51:42
А почему в деструкторе не написать вызов своих деинитов

Google
Sergey
21.04.2017
23:51:48
а деструктор у них одинаковый. deinit, четотам clear и все

Vladislav
21.04.2017
23:51:48
ну так и вызывай его в соответствующих дочерних деструкторах

Artem
21.04.2017
23:51:51
Зачем общий метод?

Sergey
21.04.2017
23:51:56
продублировал логику

не настолько неудобно, чтобы вешаться - но неудобно

Vladislav
21.04.2017
23:52:54
ну вот иначе не сделать, в рамках того как в c++ сделано наследование

Sergey
21.04.2017
23:53:13
окей. я просто убедился, что верно понял суть происходящего

вообще, удивлен, насколько разные вещи мне находят PVS studio, cppcheck и resharper

совсем разные. надо гонять все три

а, и в vs2017 же есть анализатор.

Artem
21.04.2017
23:54:26
Были бы у тебя коверити или клокворк или мы, находили бы еще разные

Artem
21.04.2017
23:54:42
Статический анализ сложная штука)

Sergey
21.04.2017
23:54:47
в целом, решарпер мне пока не нравится

Artem
21.04.2017
23:54:53
Начиная с определения ошибки

Sergey
21.04.2017
23:54:55
посижу на нем до конца триалки

по местами он просто мешает

из понравившегося - находит бесполезные #include, #define - секции

Vladislav
21.04.2017
23:55:32
clang-tidy еще добавьте

Google
Artem
21.04.2017
23:56:01
Sergey
21.04.2017
23:56:17
из непонравившегося - мания писать "этот метод можно сделать static/const" в случаях, когда нельзя на самом деле

т.е. побитово-то он конст, а по сути нет

лезет в неконстантный метод по ссылке

кому-то может и норм, а я const понимаю все-таки как аналог "чистой функции"

иначе самообман

Artem
21.04.2017
23:57:36
В крестах все самообман

Vladislav
21.04.2017
23:57:38
кстати, с каких пор вообще resharper умеет плюсы анализировать?

Sergey
21.04.2017
23:57:47
вроде полгода уже умеет

Vladislav
21.04.2017
23:58:05
там анализатор из clion'а?

Admin
ERROR: S client not available

Sergey
21.04.2017
23:58:15
не знаю. может быть

Artem
21.04.2017
23:58:25
Мне казалось, они давно умеют

Sergey
21.04.2017
23:58:51
еще что понравилось: кликаешь по интерфейсной функции, тебе показывают все ее реализации, и можешь перейти к нужной

т.е. goto definition/declaration намного более удобный

а вот что не понравилось: контекстный поиск, или как это назвать. список, который вываливается когда пишешь

Artem
22.04.2017
00:00:08
Они специализируются на супер быстром анализе и тулзах для быстрой разработки и рефакторинга

Aldar
22.04.2017
00:00:17
Почему вызывать виртуальные функции из конструктора плохо? Она же просто ведет себя как не виртуальная

Sergey
22.04.2017
00:00:20
вот написал ты строчку: some_class_instance->

и тебе показывают не только методы класса SomeClass

Google
Sergey
22.04.2017
00:01:14
а еще почему-то и все функции, которые можно применить к нему. т.е. получится Foo(some_class_instance);

это при том, что стрелку написал

что в результате: протекают сотни функций из winapi, которые можно применить к чему угодно, т.к. там void* во все поля

список засран и бесполезен

Sergey
22.04.2017
00:02:56
понравилась цветовая схема, хотя по идее ее можно и плагинами сделать

недоумение вызвали "фичи" вроде "перейти к следующему методу класса"; "подвинуть строчку на 1 вверх" и прочий шлак

Artem
22.04.2017
00:03:52
Мне казалось, они давно умеют
Я ошибался, только два года как https://m.habrahabr.ru/post/255151/comments/

Aldar
22.04.2017
00:04:10
Потому что это может быть не то, чего ты ожидаешь
так если я ожидаю что она не виртуальная

Artem
22.04.2017
00:05:15
так если я ожидаю что она не виртуальная
Это усложняет читаемость кода.

Sergey
22.04.2017
00:06:21
а, вот еще. идиотизм. код вроде if ( auto editor = Editor::get()) if ( auto node = editor->find("node0")) он помечает ворнингом. using assign as expression, или как-то так

по-моему, вполне нормальный стиль

const double a = calc_something(); const float b = calc_something_float(); - предлагает мне убрать double, float и написать везде auto

нахрена? я понимаю, в шаблонах auto, и там, где тип очевиден. а в таких вещах он важен

Sergey
22.04.2017
00:08:21
таки все верно я написал

Artem
22.04.2017
00:08:26
по-моему, вполне нормальный стиль
Это можно перепутать с сравнением

Sergey
22.04.2017
00:08:40
охуеть теперь. можо перепутать.

а как бы вы это оформили?

Vladislav
22.04.2017
00:09:29
Это можно перепутать с сравнением
нет, там же инлайновое определение переменной

Artem
22.04.2017
00:10:17
Ну наверное да, стоит разделять ассайнмент и декларейшн

Страница 807 из 2477