Advertisement
AI_UBI

C++ cast types

Jan 10th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. Преобразования.
  2.  
  3. 1. static_cast.
  4.  
  5. Синтаксис:
  6. TYPE static_cast<TYPE> (object);
  7.  
  8.  
  9. static_cast преобразует выражения одного статического типа в объекты и значения другого статического типа. Поддерживается преобразование численных типов, указателей и ссылок по иерархии наследования как вверх, так и вниз. Проверка производится на уровне компиляции, так что в случае ошибки сообщение будет получено в момент сборки приложения или библиотеки.
  10.  
  11. 2. dynamic_cast
  12.  
  13. Синтаксис:
  14. TYPE& dynamic_cast<TYPE&> (object);
  15. TYPE* dynamic_cast<TYPE*> (object);
  16.  
  17.  
  18. Используется для динамического приведения типов во время выполнения. В случае неправильного приведения типов для ссылок вызывается исключительная ситуация std::bad_cast, а для указателей будет возвращен 0. Использует систему RTTI (Runtime Type Information). Безопасное приведение типов по иерархии наследования, в том числе для виртуального наследования.
  19.  
  20. 3. const_cast.
  21.  
  22. Синтаксис:
  23. TYPE const_cast<TYPE> (object);
  24.  
  25.  
  26. Пожалуй самое простое приведение типов. Снимает cv qualifiers — const и volatile, то есть константность и отказ от оптимизации компилятором переменной. Это преобразование проверяется на уровне компиляции и в случае ошибки приведения типов будет выдано сообщение.
  27.  
  28. 4. reinterpret_cast
  29.  
  30. Синтаксис:
  31. TYPE reinterpret_cast<TYPE> (object);
  32.  
  33.  
  34. Приведение типов без проверки. reinterpret_cast — непосредственное указание компилятору. Применяется только в случае полной уверенности программиста в собственных действиях. Не снимает константность и volatile. применяется для приведения указателя к указателю, указателя к целому и наоборот.
  35.  
  36. 5. C-style cast
  37.  
  38. Синтаксис:
  39. TYPE (TYPE*) object;
  40.  
  41.  
  42. Си-шный метод приведения типов. Пожалуй самый нежелательный способ приведения типов. Страуструп пишет:
  43. «Например, что это значит выражение — x = (T)y;. Мы не знаем. Это зависит от типа T, типов x и y. T может быть названием типа, typedef или может быть параметр template-а. Может быть, х и у являются скалярными переменными и Т представляет собой значение преобразования. Может быть, х объекта класса, производного от класса Y и Т — нисходящее преобразование. По этой причине программист может не знать, что он делает на самом деле.»
  44. Вторая причина нежелательного использования приведения типов в C-style — трудоемкость процесса поиска мест приведения типов.
  45.  
  46. const_cast
  47. static_cast
  48. static_cast + const_cast
  49. reinterpret_cast
  50. reinterpret_cast + const_cast
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement