Существуют четыре оператора приведения к типу.
Операторы приведения к типу
x=dynamic_cast(p) Пытается привести указатель p к типу D*
(может вернуть 0)
x=dynamic_cast(*p) Пытается привести значение *p к типу D& (может генери
ровать исключение bad_cast)
Окончание таблицы
Операторы приведения к типу
x=static cast(v) Приводит тип операнда v к типу T, если тип T можно при
вести к типу операнда v
x=reinterpret cast(v) Приводит тип операнда v к типу T, представленному той
же самой комбинацией битов
x=const cast(v) Приводит тип операнда v к типу T, удаляя спецификатор
const
x=(T)v Приведение в стиле языка C: выполняет любое старое
приведение
x=T(v) Функциональное приведение: выполняет любое старое
приведение
Динамическое приведение обычно используется для навигации по иерархии классов, если указатель p — указатель на базовый класс, а класс D — производный от базового класса. Если операнд v не относится к типу D*, то эта операция возвращает число 0. Если необходимо, чтобы операция dynamic_cast в случае неудачи не возвращала 0, а генерировала исключение bad_cast, то ее следует применять к ссылкам, а не к указателям. Динамическое приведение — единственное приведение, опирающееся на проверку типов во время выполнения программы.
Статическое приведение используется для “разумных преобразований,” т.е. если операнд v может быть результатом неявного преобразования типа T.
Оператор reinterpret_cast используется для реинтерпретации комбинации битов. Его переносимость не гарантируется. Фактически лучше считать, что он является вообще не переносимым. Типичным примером реинтерпретации является преобразование целого числа в указатель, чтобы получить машинный адрес в программе.
Приведения в стиле языка С и функциональные приведения могут выполнить любое преобразование типа, которое можно осуществить с помощью оператора static_cast или reinterpret_cast в сочетании с оператором const_cast.
Приведений лучше избегать. Во многих ситуациях их использование свидетельствует о плохом стиле программирования. Исключения из этого правила представлены ранее. Приведение в стиле языка С и функциональные приведения имеют ужасное свойство: они позволяют вам не вникать в то, что именно они делают. Если вы не можете избежать явного преобразования типа, лучше используйте именованные приведения.
Опубликовал katy
May 01 2015 12:14:04 ·
0 Комментариев ·
2096 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.