@ProCxx

Страница 2168 из 2477
Igor
29.06.2018
09:57:26
Я вот считаю, что наследование должно быть виртуальным по умолчанию
а я вот - что компилятор должен взрываться с воплем "dreaded diamond detected, define your intentions with virtual or nonvirtual" )

Anatoly
29.06.2018
09:58:39
А, это... Вижак вроде бы варнил ...
вижак нем как рыба с enable all warnings (смотрел на последнем релизе 15.7.4)

Ilia
29.06.2018
10:11:10
вижак нем как рыба с enable all warnings (смотрел на последнем релизе 15.7.4)
Когда я последний раз с ним общался на эту тему , он был 5-ой версии.

Anatoly
29.06.2018
10:11:57
Google
Ilia
29.06.2018
10:12:29
Нет, но я за правду...

Anatoly
29.06.2018
10:17:38
Нет, но я за правду...
ну, твоя правда не соответсвует действительности, во всяком случае у меня нет возможности проверить выбрасывал ли VC5 предупреждение, хотя в файловом архиве валяется эта студия.

Mikhail Voronov
29.06.2018
10:18:58
Я вот считаю, что наследование должно быть виртуальным по умолчанию
это же очень большой оверхэд по сравнению с обычным наследованием

Ilia
29.06.2018
10:25:17
это же очень большой оверхэд по сравнению с обычным наследованием
Вот ответь пож. на вопрос, когда ты пишешь class MyClass : public YourClass { }; ты сколько экземпляров YourClass ожидаешь увидить в своём объекте ?

Mikhail Voronov
29.06.2018
10:27:30
Вот ответь пож. на вопрос, когда ты пишешь class MyClass : public YourClass { }; ты сколько экземпляров YourClass ожидаешь увидить в своём объекте ?
ну какое наследование использовать - это же вопрос проектирования, в некоторых командах на уровне кодинг стандарте запрещено множественное наследование :).

Ilia
29.06.2018
10:32:16
Ты на вопрос не ответил.

Anatoly
29.06.2018
10:34:45
Mikhail Voronov
29.06.2018
10:34:53
я посчитал, что он не требует ответа). На уровне MyClass ожидаю один

Ilia
29.06.2018
10:50:44
я посчитал, что он не требует ответа). На уровне MyClass ожидаю один
Вот, это и означает, что ты ожидаешь, что наследование должно быть виртуальным. А оно -- невиртуальное.

Vhäldemar
29.06.2018
10:53:06
Вот, это и означает, что ты ожидаешь, что наследование должно быть виртуальным. А оно -- невиртуальное.
и какая разница? вроде ж multiple inheritance признали плохим тоном, в чем в случае одиночного разница?

Ilia
29.06.2018
10:53:32
и какая разница? вроде ж multiple inheritance признали плохим тоном, в чем в случае одиночного разница?
Кто признал множественное наследование плохим тоном? Java-телепузики?

Google
Mikhail Voronov
29.06.2018
10:54:27
Вот, это и означает, что ты ожидаешь, что наследование должно быть виртуальным. А оно -- невиртуальное.
я ожидаю это на уровне MyClass, а то что произойдёт при наследовании от него нужно думать уже по месту тому, кто это делает

Vhäldemar
29.06.2018
10:55:03
честно, ну вот я наверно ненастоящий сварщик, но профита от множественного наследования за свою довольно долгую карьеру никак не видел. да-да, именно они, телепузики с гномиками из дотнетика и прочие mainstream-loosers

Mikhail Voronov
29.06.2018
10:57:47
некошерно
А как кошерно?:)

Ilia
29.06.2018
11:00:39
На самом деле в С++ большая проблема в том, что если ты начал писать иерархию с линейным наследованием, её потом будет сложно переделывать в множественное, и наоборот. Т.е. как бы нарушается свобода в использовании классов. Страустрап немного это порешал, попытался, но полагаю что полной свободы не достигнуто. И большой вопрос, может ли эта свобода вообще быть...

Mikhail Voronov
29.06.2018
11:02:56
Вот ответь пож. на вопрос, когда ты пишешь class MyClass : public YourClass { }; ты сколько экземпляров YourClass ожидаешь увидить в своём объекте ?
я как-то однажды разобрался, как устроено виртуальное наследование под капотом (т.е. про virtual thunk functions, смещения виртуальных функций в vtable, смещения базового класса в vtable и т.д.) и с тех пор мне кажется, что при полиморфных вызовах там многовато оверхэда + раздувание кода из-за thunk функций.

Ilia
29.06.2018
11:30:47
Я о логике говорил только. О семантике объектной модели при MI. Оверхед -- это фигня, ты бы знал, какой оверхед скажем в LISP при множественной диспетчеризации методов, и нифига, терпят... Оверхэд может рассматриваться ПОСЛЕ того, как предложена одна или другая семантическая модель объектной системы. Можно рассмотреть их возможные реализации и возможный оверхэд... Но это не интересно, если тебе базовая семантическая модель не подходит. Грубо говоря, если ты хочешь constexpr в compiletime, ты же не думаешь об оверхеде компилятора ? Нет. Ты просто хочешь и все. К тому же, когда Страус делал MI, там не проблемы оверхеда решающими были...

Mikhail Voronov
29.06.2018
11:57:02
Очевидно, когда используется Lisp, Java, C#, то нужно быть готовым к оверхеду большему, чем у плюсов или ассемблера, а в случае C++ не хочется платить за неиспользуемое. И про преждевременную оптимизацию тоже уже много раз обсуждалось. Но постоянное виртуальное наследование, имхо, не совсем вопрос tradeoff, т.к., во-первых, оно редко используется (нормально же живут люди в C#/Java), во-вторых, при множественном наследовании в C++ нужно чётко понимать, что ты делаешь и на что это влияет.

Vhäldemar
29.06.2018
11:57:03
лисп давно себя позиционирует как язык с минимальным оверхедом и исповедует принцип "не используешь - на платишь"?

а то можно и ЖС привести как пример, чо

yuri
29.06.2018
11:58:47
Да нет, все верно. Я очень долгое время думал, что ОпенОффис на яве написан, именно из-за таких вещей.

Alexander
29.06.2018
12:50:45
Пока хлеб не отняли - https://bincrafters.github.io/2018/06/28/OSS-vs-Enterprise-Dependency-Management/

Ilia
29.06.2018
13:09:56
Это статья? Ты накрапал?

Alexander
29.06.2018
13:12:22
Это статья? Ты накрапал?
не, это не моя статья

Igor
29.06.2018
13:31:21
union AudioCodecProfile { struct { unsigned int channels : 8; unsigned int frame_size : 24; unsigned int sample_rate : 16; unsigned int extradata_size : 16; } s; uint64_t u64; }; AudioCodecProfile p = {0}; кланговский анализатор предупреждает что missing field 'frame_size' initializer это получается {0} здесь кастуется на внутреннюю структуру, а не на весь объект?

Google
Igor
29.06.2018
13:35:00
ох и впрямь, забыл что оно только на массивах себя ведёт как memset

Anatoly
29.06.2018
13:38:32
ох и впрямь, забыл что оно только на массивах себя ведёт как memset
а зачем тебе для глобального объекта иницилизатор?

Igor
29.06.2018
13:39:06
Anatoly
29.06.2018
13:40:19
не глобального, внутри функции
а почему ты не используешь value initialization AudioCodecProfile p{};?

Max
29.06.2018
13:41:38
хотя тут говорят иначе... https://stackoverflow.com/questions/1538943/why-is-the-compiler-throwing-this-warning-missing-initializer-isnt-the-stru

Igor
29.06.2018
13:42:24
а почему ты не используешь value initialization AudioCodecProfile p{};?
теперь использую - код не мой был, глаз зацепился о внезапный варн

Chiveson
29.06.2018
13:43:57
не по теме, может сталкивался кто, Как получить физический серийный номер процессора без dmidecod и cpuid, из /sys? если без рута, то вообще огонь

Anton
29.06.2018
13:50:56
а почему ты не используешь value initialization AudioCodecProfile p{};?
Это структура, поэтому это будет не value-initialisation, а agregate-initialisation

"In all cases, if the empty pair of braces {} is used and T is an aggregate type, aggregate-initialization is performed instead of value-initialization. "

Anatoly
29.06.2018
13:52:49
Это структура, поэтому это будет не value-initialisation, а agregate-initialisation
в деталях вы правы, но в общем, я не сильно ошибся ;): This is the initialization performed when a variable is constructed with an empty initializer.

Anatoly
29.06.2018
13:53:33
и частный случай value initialization - aggregate-initialization.

Anton или вы не согласны с тем, что мемберы юниона при этом не будут zero инициализированы?

Anton
29.06.2018
14:05:00
Anatoly
29.06.2018
14:05:41
Я как раз согласен с тем, что мемберы будут zero-инициализированы)
ну, а терминологически вы абсолютно правы, хотя агрегатная частный случай для value initialization

Anton
29.06.2018
14:12:43
ну, а терминологически вы абсолютно правы, хотя агрегатная частный случай для value initialization
Короче хронология такая: Имеем выражение вида AudioCodecProfile p{}; Для объекта p это будет означать агрегатную инициализацию, т.к. AudioCodecProfile - агрегатный тип В свою очередь, из за того, что initializer list в данном случае пуст, для всех полей типа AudioCodecProfile вызовется value-initialization. А т.к. все поля у него - простые типы, для всех вызовется zero-initialisation, в результате которого они обнулятся Как то так))

Admin
ERROR: S client not available

Google
Anatoly
29.06.2018
14:16:57
наш случай (8.4)

Побитый
29.06.2018
14:18:31
наш случай (8.4)
Это драфт или электронная версия стабильного стандарта от ISO?

Anton
29.06.2018
14:18:57
наш случай (8.4)
Ну, в моём сообщении это последний этап) Просто если бы было выражение вида AudioCodeProfile p{0}, то это была бы уже copy-initialization

Побитый
29.06.2018
14:19:01
драфт
Ты в интернете его так смотришь? Или у тебя офлайн версия?

Побитый
29.06.2018
14:20:01
оффлайн
А через какую программу? ? У меня на винде в SumatraPDF крашится при поиске слова...

Anton
29.06.2018
14:20:52
На самом деле без документации нереально точно на такие вопросы отвечать) Хренова куча этих инициализаций и случаев, в которых каждая из них вызывается)

Igor
29.06.2018
14:27:05
Побитый
29.06.2018
14:30:43
http://eel.is/c++draft/ а ещё бывает так
О, вот это царский подгон. Там ещё и разные стандарты есть

Alexander Alprog
29.06.2018
17:40:34
спасибо за полгон

Stanislav
29.06.2018
19:14:55
не знаете есть ли либы под c++ для генерации фейковых данных? https://github.com/ffaker/ffaker типа такого (оно для руби)

Stanislav
29.06.2018
19:20:01
но хотелось бы либу оффлайн)

Stanislav
29.06.2018
19:23:19
Google
Stanislav
29.06.2018
19:24:00
надо тестить удаленный софт, и просто генерить в некоторых местах данные

Anatoly
29.06.2018
19:26:55
но хотелось бы либу оффлайн)
нагуглил https://github.com/schoentoon/cxxfaker

Stanislav
29.06.2018
19:29:54
ээ, фаззеры?
и как мне фазер заюзать для генерации протокола нужного?

Kitsu
29.06.2018
19:30:28
и как мне фазер заюзать для генерации протокола нужного?
а, ну протокол это другое, можно погуглить мутаторы если что-то известное

Vhäldemar
29.06.2018
20:39:32
что значит нужного протокола?

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