Pull to refresh
16
0

Пользователь

Send message

Для начала, потому что в языке нету подходящего типа данных для представления такого сообщения.

Массив это пара (T*, size_t)

У структур можно хаком "расширять" массив в последнем поле, но только в последнем.

Это никак не относится к задачи

Кроме того, обычно если с сообщением работают не как с массивом байт - значит, его редактируют.

Нет. Я хочу работать рид-онли с разными структурами данных, а не только с байтами.

В этом и сила с++, что можно написать лучше. В с# жрешь то говно что дали.

Раскажите как nodiscard, constexpr и traling return влияют на производительность?

Отличная задумка, но не хватает нескольких базовых вещей: оператора or, метода flatten для преобразования optional<optional> в optional>, да даже банальный transform появился только в C++23.

Я думаю они в с++ не нужны. Подход с++ это if и early return. Другой подход имеет смысл только вместе с другими боле базовыми фичами языка

Смех в том что приниятие какого pXXX зачастую нетребует изменений в реализации компилятора. Т.е. оно как работало так и работает, просто у стандартизаторов дошли руки это описать.

вы не можете преобразовать массив переменной длины посреди сообщения в набор байт через аналог reinterpret_cast.

почему?

Прочитал первою строку: std::reinterpreprepret_cast<T>( ) демонстрирует полное незнание темы. Дальше время тратить на чтение мнения эксперта не стал.

Не надо просто все хранить в интах. Если это резалт то у него обязан быть operator bool

А зачем нужен int* ? для int p как раз if (*p) не компилируется.

По хорошему не должно быть чтобы и p и *p имели такую семантику. Это означает что у вас в коде есть что то вроде optional<optional<T>> p

Любой компилятор даст варнинг на код мозиллы, так что этот пример как аргумент не зачитываю. Во всех ваших примерах понятно что хотели написать, это в коде написано.

killAllHumans() // не понятно возможно хотели loveAllHumans()

loveAllHumansWithMyHartIRellyMeanIt() // вот так лучше

насколько я помню clang даёт.

более-менее для C, но не C++

то что в документации GCC относится и к Си и к Си++ насколько я могу судить

Есть и обратные примеры, type punning через union. А выигрыш в 20% не нужен если это сломает большую часть кодовых баз.

Что запрещает компилятору доопредeлить UdB до implementation defined и обозначить это в документации?

Продолжай верить в деда мороза.

Да ладно, версия компилятора вышла лет 5 назад, а про стрикт алиасинг разговры уже больше 10 лет назад. Так что какой-то внезапности не наблюдаю.

предложил вариант со специальной инструкцией SSE4

и как же она будет работать не выходя за границу? =)

Тот же strict-aliasing он не пришёл внезапно, поэтому не вижу большой проблемы следить за такого рода breaking change в компиляторах. Тем более что strlen так просто не пропадёт, и он должен остаться производительный, а значит и этот подход будет работать.

Information

Rating
5,031-st
Registered
Activity