Восходящие приведения целых типов

Объекты целочисленного типа можно преобразовать в другой более широкий целочисленный тип (то есть тип, который может представлять более широкий набор значений). Этот расширенный тип преобразования называется восходящим приведением целого типа. Благодаря восходящему приведению целого типа в выражении, в котором можно использовать другой целочисленный тип, можно использовать следующие элементы.

  • Объекты, литералы и константы типа char и short int.

  • Типы перечисления.

  • Битовые поля int.

  • Перечислители.

Во время повышения в C ++ значения сохраняются. То есть гарантируется, что значение после повышения будет таким же, как до него. Во время повышения с сохранением значений объекты более коротких целочисленных типов (например, битовые поля или объекты типа char) повышаются до типа int, если int может представить полный диапазон исходного типа. Если int не может представить полный диапазон значений, объект повышается до типа unsigned int. Хотя эта стратегия такая же, как в ANSI C, во время повышения с сохранением значений не сохраняется наличие знака у объекта.

Обычно при повышениях с сохранением значения и повышениях с сохранением наличия знака выдаются одинаковые результаты. Однако результаты могут отличаться, если повышенный объект является одним из следующих элементов.

  • Операнд /, %, /=, %=, <, <=, > или >=.

    Эти операторы зависят от знака для определения результата. Поэтому, если используются эти операнды, при повышениях с сохранением значения и повышениях с сохранением наличия знака выдаются разные результаты.

  • Левый операнд >> или >>=.

    Эти операторы обрабатывают количества со знаком и без знака по-разному при выполнении операции сдвига. В случае количеств со знаком сдвиг вправо приводит к перемещению знакового бита в освобожденные позиции битов. В случае количеств без знака освобожденные позиции битов заполняются нулями.

  • Аргумент перегруженной функции или операнд перегруженного оператора, который зависит от наличия знака у типа данного операнда для сопоставления аргумента. (Дополнительные сведения об определении перегруженных операторов см. в разделе Перегруженные операторы.)

См. также

Ссылки

Стандартные преобразования