Отличная задумка, но не хватает нескольких базовых вещей: оператора or, метода flatten для преобразования optional<optional> в optional>, да даже банальный transform появился только в C++23.
Я думаю они в с++ не нужны. Подход с++ это if и early return. Другой подход имеет смысл только вместе с другими боле базовыми фичами языка
Смех в том что приниятие какого pXXX зачастую нетребует изменений в реализации компилятора. Т.е. оно как работало так и работает, просто у стандартизаторов дошли руки это описать.
Любой компилятор даст варнинг на код мозиллы, так что этот пример как аргумент не зачитываю. Во всех ваших примерах понятно что хотели написать, это в коде написано.
killAllHumans() // не понятно возможно хотели loveAllHumans()
loveAllHumansWithMyHartIRellyMeanIt() // вот так лучше
Тот же strict-aliasing он не пришёл внезапно, поэтому не вижу большой проблемы следить за такого рода breaking change в компиляторах. Тем более что strlen так просто не пропадёт, и он должен остаться производительный, а значит и этот подход будет работать.
Массив это пара (T*, size_t)
Это никак не относится к задачи
Нет. Я хочу работать рид-онли с разными структурами данных, а не только с байтами.
В этом и сила с++, что можно написать лучше. В с# жрешь то говно что дали.
Раскажите как nodiscard, constexpr и traling return влияют на производительность?
Я думаю они в с++ не нужны. Подход с++ это if и early return. Другой подход имеет смысл только вместе с другими боле базовыми фичами языка
Смех в том что приниятие какого pXXX зачастую нетребует изменений в реализации компилятора. Т.е. оно как работало так и работает, просто у стандартизаторов дошли руки это описать.
почему?
Прочитал первою строку:
std::reinterpreprepret_cast<T>( )демонстрирует полное незнание темы. Дальше время тратить на чтение мнения эксперта не стал.Не надо просто все хранить в интах. Если это резалт то у него обязан быть operator bool
А зачем нужен int* ? для
int pкак раз if (*p) не компилируется.По хорошему не должно быть чтобы и p и *p имели такую семантику. Это означает что у вас в коде есть что то вроде
optional<optional<T>> pЛюбой компилятор даст варнинг на код мозиллы, так что этот пример как аргумент не зачитываю. Во всех ваших примерах понятно что хотели написать, это в коде написано.
Все равно йода
насколько я помню clang даёт.
то что в документации GCC относится и к Си и к Си++ насколько я могу судить
Есть и обратные примеры, type punning через union. А выигрыш в 20% не нужен если это сломает большую часть кодовых баз.
Что запрещает компилятору доопредeлить UdB до implementation defined и обозначить это в документации?
Продолжай верить в деда мороза.
Да ладно, версия компилятора вышла лет 5 назад, а про стрикт алиасинг разговры уже больше 10 лет назад. Так что какой-то внезапности не наблюдаю.
и как же она будет работать не выходя за границу? =)
Тот же strict-aliasing он не пришёл внезапно, поэтому не вижу большой проблемы следить за такого рода breaking change в компиляторах. Тем более что
strlenтак просто не пропадёт, и он должен остаться производительный, а значит и этот подход будет работать.