Могу ли я узнать, приведет ли 'c ++' к int
или char
Согласно стандартной цитате в ответе Л.Ф. , вы можете знать, что это приводит к char
.
так что я точно знаю, если это не переполнение?
Вы можете точно знать, что это переполнение. На системах, где char
является типом со знаком, насколько я могу судить, поведение программы будет неопределенным.
Можно ли проверить встроенный тип во время выполнения?
Вы не можете проверить встроенные типы в время выполнения , но вы можете проверить их уже в время компиляции . Например:
static_assert(std::is_same_v<decltype(c++), char>);
когда я говорю: signed char c = CHAR_MAX + 1 then CHAR_MAX + 1
становится int
результатом, а затем в присваивается значение c
, которое определяется реализацией.
Действительно. За исключением экзотических систем, где sizeof(signed char) == sizeof(int)
, в этом случае нет продвижения, а арифметика вызывает переполнение, которое является неопределенным поведением.
И только до C ++ 20. Начиная с C ++ 20, инициализация со знаком с непредставленным значением определяется стандартом.
Могу ли я когда-нибудь переполнить подписанный символ?
Да. Использование оператора приращения. Насколько я могу судить, стандарт ничего не говорит о продвижении в рамках оператора приращения. Однако это может быть открытым для толкования.