Я пытался прочитать стандарт C/C++ для этого, но я не могу найти ответ.Расширение и сужение правил в C/C++
Скажите у вас есть следующий фрагмент кода:
int8_t m;
int64_t n;
и что в какой-то момент вы выполняете m + n
, само сложение является бинарным оператором, и я думаю, что, скорее всего, думаю, что произойдет в таком случае:
- Широкий
m
к тому же размераn
, называют результат расширяющегосяm_prime
- Выполните
m_prime + n
- Возвращает результат типа
int64_t
Я пытался понять, однако, если вместо выполнения m+n
я выполнил n+m
результат изменится (потому что возможно может быть сужению операции вместо того, уширение).
Я не могу найти часть стандарта, которая разъясняет этот момент (который, как я понимаю, может звучать тривиально).
Может ли кто-нибудь указать мне, где я могу найти это в стандарте? или что происходит вообще в ситуациях, подобных тому, что я выставил?
Лично я смотрел раздел «Аддитивные операторы», но мне не кажется, что нужно объяснять, что происходит, арифметика указателя немного покрыта, но нет ссылки на какое-то правило применения литья, которое неявно применяется.
Можно предположить, что я говорю о C++ 11, но любой другой стандарт, я думаю, применил бы те же правила.
Нет стандарта 'C/C++'. Существует стандарт «C», стандарт «C++». И эти два очень разные документы. – StoryTeller
C в основном почти истинное подмножество C++, по крайней мере ANSI C89.И да, вы расширяетесь независимо от того, находится ли меньшее целое число слева или справа от знака +. –
* «C в основном почти истинное подмножество C++, по крайней мере ANSI C89« * - Это не так, я боюсь. – StoryTeller