Для чего нужен static_cast, как он работает и где его применяют?
У static_cast очень много различных применений. Его идея состоит в следующем: это ограниченный по мощи C-style cast. Ограничение нужно потому, что C-style cast может привести что угодно к чему угодно (ну, почти), и тем самым может скрыть ошибку. Например, вы можете случайно закастить const char* в char*, получив крэш в некоторых системах с аппаратной поддержкой const-памяти. static_cast вам такого не позволит.
Большую часть времени, когда вы хотите сделать явное преобразование типов (а я надеюсь, это бывает достаточно редко), вы хотите именно static_cast.
Формальный список всего, что умеет static_cast, очень большой, я приведу лишь наиболее важные вещи, которые он умеет (а также которые он не умеет):
Что можно:
dynamic_cast (он специально для этого предназначен).int, long, char, unsigned int — все их можно кастить друг в друга при помощи static_cast.void. Результат будет вычислен и отброшен (но побочные эффекты, разумеется, выполнятся).static_cast может привести константу nullptr к любому типу-указателю. Обычно это не нужно и можно полагаться на неявное преобразование типов, но иногда (например, для выбора нужной перегрузки функции) такое может пригодится. Что нельзя:
double нельзя привести к указателю на int. Для трюков с нарушением type safety пользуйтесь reinterpret_cast.const и/или volatile. Если вам необходимо нарушить const-корректность, пользуйтесь const_cast.reinterpret_cast.Ещё одной причиной использования static_cast (как и других C++-специфических преобразований типов) является лёгкость его поиска в исходниках, как глазами, так и поисковыми утилитами. Сишный каст (особенно его функциональную разновидность) очень легко пропустить в коде.
Для сравнения, «привычное» преобразование типов (C-style cast) равносильно следующей последовательности:
const_cast.const_cast не может дать нужный результат, то static_cast (но с разрешённым преобразованием к недообъявленному типу)static_cast добавить const_cast.reinterpret_cast.const_cast.Продвижение своими сайтами как стратегия роста и независимости