Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Преобразования.
- 1. static_cast.
- Синтаксис:
- TYPE static_cast<TYPE> (object);
- static_cast преобразует выражения одного статического типа в объекты и значения другого статического типа. Поддерживается преобразование численных типов, указателей и ссылок по иерархии наследования как вверх, так и вниз. Проверка производится на уровне компиляции, так что в случае ошибки сообщение будет получено в момент сборки приложения или библиотеки.
- 2. dynamic_cast
- Синтаксис:
- TYPE& dynamic_cast<TYPE&> (object);
- TYPE* dynamic_cast<TYPE*> (object);
- Используется для динамического приведения типов во время выполнения. В случае неправильного приведения типов для ссылок вызывается исключительная ситуация std::bad_cast, а для указателей будет возвращен 0. Использует систему RTTI (Runtime Type Information). Безопасное приведение типов по иерархии наследования, в том числе для виртуального наследования.
- 3. const_cast.
- Синтаксис:
- TYPE const_cast<TYPE> (object);
- Пожалуй самое простое приведение типов. Снимает cv qualifiers — const и volatile, то есть константность и отказ от оптимизации компилятором переменной. Это преобразование проверяется на уровне компиляции и в случае ошибки приведения типов будет выдано сообщение.
- 4. reinterpret_cast
- Синтаксис:
- TYPE reinterpret_cast<TYPE> (object);
- Приведение типов без проверки. reinterpret_cast — непосредственное указание компилятору. Применяется только в случае полной уверенности программиста в собственных действиях. Не снимает константность и volatile. применяется для приведения указателя к указателю, указателя к целому и наоборот.
- 5. C-style cast
- Синтаксис:
- TYPE (TYPE*) object;
- Си-шный метод приведения типов. Пожалуй самый нежелательный способ приведения типов. Страуструп пишет:
- «Например, что это значит выражение — x = (T)y;. Мы не знаем. Это зависит от типа T, типов x и y. T может быть названием типа, typedef или может быть параметр template-а. Может быть, х и у являются скалярными переменными и Т представляет собой значение преобразования. Может быть, х объекта класса, производного от класса Y и Т — нисходящее преобразование. По этой причине программист может не знать, что он делает на самом деле.»
- Вторая причина нежелательного использования приведения типов в C-style — трудоемкость процесса поиска мест приведения типов.
- const_cast
- static_cast
- static_cast + const_cast
- reinterpret_cast
- reinterpret_cast + const_cast
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement