В С++ предусмотрена возможность явно установить для выражения заданный тип данных. Наиболее универсальное средство для этого – операция приведения типа, унаследованная от языка C, которая имеет вид
(тип) выражение
При выполнении такой операции указанное выражение приводится к заданному в скобках типу данных. Например, приведение типа может использоваться для получения точного значения при делении целых чисел:
Приведение данных – потенциально опасная операция. Если тип данных назначения не может принять приводимое значение, то результат преобразования будет непредсказуемым и приведёт к потере данных. Например, приведение значения типа char к значению типа int всегда безопасно, а обратная операция – нет. Приведение к типу char значения 12345, которое выходит за допустимый для char диапазон, даст неопределенный результат, зависящий от реализации компилятора.
В C++ кроме вышеописанной операции для приведения типов добавлены несколько новых операций: dynamic_cast, static_cast, reinterpret_cast, const_cast.
Все приведённые операции имеют одинаковый синтаксис:
операция<целевой_тип>(выражение)
Операция dynamic_cast предназначена для динамического приведения типов во время выполнения программы. В ней целевой тип должен быть указателем или ссылкой и в результате выполнения операции выражение получит тип указателя или ссылки. Работа с указателями будет рассмотрена позднее.
Операция const_cast служит для явной подмены описателя const. Целевой тип должен совпадать с типом выражения за исключением модификатора const. Чаще всего операция используется с целью лишить выражение описателя const.
Операция reinterpret_cast служит для преобразования указателя одного типа в указатель другого типа, а также позволяет приводить указатель к целому типу и целый тип – к указателю.
Операция static_cast по сути заменяет традиционную операцию приведения типов (тип) выражение, унаследованную от C.