Защо необходимостта от static_cast, как работи и където тя се използва стека преливане на Руски

Static_cast има много различни приложения. Неговата идея е следната: тя е ограничена от силата C-стил гласове. Ограничение е необходимо, тъй като C-стил актьорски състав може да доведе до нищо нещо (е, почти), и по този начин може да се скрие грешката. Например, може да се случайно zakastit Конст Чар * до въглен *. получаване на катастрофата на някои системи с хардуерно Конст памет. static_cast това няма да ви разочарова.

Повечето от времето, когато искате да направите открита конверсия тип (и аз се надявам, че се случва доста рядко), който искате да го static_cast.

Официално списък на всичко, което може static_cast. много голям. Ще цитирам само най-важните неща, които той знае как да се (и които той не може):

  1. Преобразуване указател към класа майка да указател към извлечения клас. предмета на показалеца е длъжен да бъде дясното дете класа, в противен случай неопределено поведение. Ако не сте сигурни и искате да проверите дали подклас на обекта, използвайте dynamic_cast (това е специално предназначен за тази цел).
  2. Обмяна на числените типове. вътр. дълго. Чар. неподписан инт - всички те могат да дадат един на друг с помощта static_cast.
  3. Zakastit може да бъде всеки израз в празнотата. Резултатът ще се изчислява и се изхвърля (но страничните ефекти, разбира се, да бъдат изпълнени).
  4. static_cast nullptr константа може да доведе до всякакъв тип показалка. Обикновено това не е необходимо и можете да разчитате на имплицитно преобразуване, но понякога (например, за да изберете желаната функция претоварване), това може да дойде по-удобно.
  1. Преобразуване между указатели по принцип несъвместими видове. Например, указател към двойна не може да доведе до указател към Int. За трикове в нарушение на безопасността тип, използвайте reinterpret_cast.
  2. Указатели към видове, както и вида на несъвместими атрибути конст и / или летливи. Ако е необходимо да се прекъсне конст-коректността, използвайте const_cast.
  3. Разбира се, вие не можете да дадете указател към член функция към указател към нормална функция или указател към указател към данните от кода. За да използвате тези мръсни хакове reinterpret_cast.

Друга причина да се използва static_cast (както и други C ++ - специфични видове реализации) е най-лесното търсене му в източниците като очите, и инструменти за търсене. Sishny каста (особено на функционалната си разнообразие) е много трудно да се изпусне в кода.

За сравнение, "обикновено" тип реализация (C-стил гласове), еквивалентни на следната последователност:

  1. const_cast.
  2. Ако const_cast не може да се получи желаният резултат, static_cast (но позволява превръщане nedoobyavlennomu тип)
  3. Ако е така, и не излезе, компилаторът се опитва да добавите опашка към static_cast const_cast.
  4. Ако това не работи, а след това reinterpret_cast.
  5. . и ако не излезе, след това се добавя към него const_cast.