в расте знаковое переполнение циклическое, что это явно вбито в компилятор? Не хотите циклического переполнения, используйте семейство функций wrapping*, saturating*, overflowing* и checked*. На любой вкус. Если надо, можно даже для конкретной функции поведение "+" переписывать явным образом.
Никаких претензий. Я не понимаю чем это лучше
Тем, что UB не ограничено одними испорченными данными.
нюанс в том, что вы не знаете заранее, где у вас обычное умножение надо заменить на вот эти вот wrapping/saturating/etc. И вы точно так же можете использовать подобное семейство в плюсах. Разница ведь не в поведении реальных программ, разница в том, что растовитяне умудряются даже такие кейсы выдать за вин раста
Конечно это вин, потому что нет UB. Отличие в том, что это обычная операция, ну перепутаете вы в коде + и +, в данном случае компилятор вас не защитит. Но при этом поведение в любом случае будет корректным, просто не таким, как вы ожидаете
для начала пожалуйста ознакомьтесь что значит термин "UB"
Обсуждают сегодня