Pull to refresh
16
0

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

Send message

Если с# закрывает ваши задачи то хорошо, не стоит брать с++. Высокоуровневые языки это размен контроля на простоту.

Ключевое слово "потенциально". Просто мазать constexpr везде смысла мало. Современный С++ даёт возможность специализировать поведение программы для разных данных через метапрограммирование и constexpr как его часть. Но для этого нужно писать соответсвующий код. Мы рассуждаем в контексте других языков, где таких возможностей попросту нет. Значит сравнивать надо с С++ кодом в котором так же эти возможности не задёствуются, и лишние кейворды вроде constexpr/noexcept не возникают.

Если вы не знаете что делает constexpr то следует ознакомится с документацией прежде чем писать чушь в комментариях. Заодно узнаете про consteval.

constexpr - перенести часть вычислений в компайлтайм

const propagation оптимизация работает и в си без всяких constexpr

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

Массив это пара (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% не нужен если это сломает большую часть кодовых баз.

1
23 ...

Information

Rating
Does not participate
Registered
Activity