Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_k_ekzamenu_po_C.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
241.66 Кб
Скачать

22. Преобразования типов в выражениях

Преобразования типов выполняются, если операнды, входящие в выражения, имеют различные типы. Ниже приведена последовательность преобразований.

  • Любые операнды типа char, unsigned char или short преобразуются к типу int по правилам:

    • char расширяется нулем или знаком в зависимости от умолчания для char;

    • unsigned char расширяется нулем;

    • signed char расширяется знаком;

    • short, unsigned short и enum при преобразовании не изменяются.

    • Затем любые два операнда становятся либо int, либо float, double или long double.

  • Если один из операндов имеет тип long double, то другой преобразуется к типу long double.

  • Если один из операндов имеет тип double, то другой преобразуется к типу double.

  • Если один из операндов имеет тип float, то другой преобразуется к типу float.

  • Иначе, если один из операндов имеет тип unsigned long, то другой преобразуется к типу unsigned long.

  • Иначе, если один из операндов имеет тип long, то другой преобразуется к типу long.

  • Иначе, если один из операндов имеет тип unsigned, то другой преобразуется к типу unsigned.

  • Иначе оба операнда должны иметь тип int.

23. Явные преобразования типов. Операция const_cast. Операция dynamic_cast

Для выполнения явных преобразований типа в C++ существует целая группа операций —

const_cast, dynamic_cast, reinterpret_cast и static_cast, а также операция приведения типа, унаследованная из языка С.

Операция может записываться в двух формах:

тип (выражение)

(тип) выражение

Результатом операции является значение заданного типа, например:

int а = 2;

float b = 6.8;

Величина a преобразуется к типу double, a переменная b — к типу int с отсечением дробной части, в обоих случаях внутренняя форма представления результата операции преобразования иная, чем форма исходного значения.

Операция const_cast

Операция служит для удаления модификатора const. Как правило, она используется при передаче в функцию константного указателя на место формального параметра, не имеющего модификатора const.

Формат операции: const_cast <тип> (выражение)

Обозначенный тип должен быть таким же, как и тип выражения, за исключением модификатора const. Обычно это указатель. Операция формирует результат указанного типа.

Операция const_cast используется в том случае, когда программист уверен, что в теле функции значение, на которое ссылается указатель, не изменяется.

Операция dynamic_cast

Операция применяется для преобразования указателей родственных классов иерархии, в основном — указателя базового класса в указатель на производный класс, при этом во время выполнения программы производится проверка допустимости преобразования.

Формат операции: dynamic_cast <тип *> (выражение).

Выражение должно быть указателем или ссылкой на класс, тип — базовым или производным

для этого класса. После проверки допустимости преобразования в случае успешного выполнения операция формирует результат заданного типа, в противном случае для указателя результат равен нулю, а для ссылки порождается исключение bad_cast.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]