говорит следующее:
unsigned char or unsigned short can be converted to int if it can hold its entire value range, and unsigned int otherwise
в стандарте по этой теме тоже самое написано.
мне интересен случай когда будет неявный каст к unsigned int и проясните еще фразу - can hold its entire value range.
перемножение двух unsigned short с последующим неявным кастом к int приведет к переполнению, что сразу UB.
Правильно ли я понимаю, что здесь речь идет как раз про то, что в выражении умножения двух unsigned short, неявный каст с целочисленным повышением будет как раз к int, так как он может уместить в себе максимальный unsigned short, а значит unsigned int нам для неявного каста не нужен. Результат умножения, хоть и ведет к переполнению, будет все тем же int.
А тогда какой случай должен быть, чтобы при этом ранг типа был ниже int, и был неявный каст к unsigned int?
Все так, сначала приводится к int, а если переполнилось — ну, жаль к unsigned int приведется, например, еслт размер unsigned short и unsinged int одинаковый
тогда выходит, что unsigned int получим на модели данных с LP32, там оба будут 16 битными. Спасибо!
Promotion никогда не ведёт к UB. И не раньше для преобразований типа, это не оно. Когда - тоже не важно.
Там про умножение of two promoted unsigned short
Обсуждают сегодня