В этой статье слишком короткая преамбула. |
Операция static_cast
в языке C++ осуществляет явное допустимое приведение типа данных[1].
Синтаксис: static_cast < type_to > ( object_from )
int nShots = 10, nHits = 8;
auto hitRate = static_cast<float>(nHits) / nShots;
static_cast
создан для выполнения всех видов преобразований, разрешенных компилятором[2]. Все преобразования работают, только если есть совместимость по const
и volatile
.
1. Любое из преобразований типа, которые Си++ производит неявно (например, массива в указатель, одного числового типа в другой, неявный вызов конструктора). Явное написание static_cast
может потребоваться, например:
auto hitRate = static_cast<float>(nHits) / nShots;
double a = 1.0; auto b = static_cast<float>(a);
Base& x = use1 ? static_cast<Base&>(obj1) : static_cast<Base&>(obj2);
.2. Если соответствующее преобразование отмечено ключевым словом explicit
.
3. Преобразование из/в тип enum class
.
4. Если в программе участвует указатель на функцию — для явного указания, какую из перегруженных функций брать.
std::transform(s.begin(), s.end(), s.begin(), static_cast<int(*)(int)>(std::toupper));
Оператор static_cast
может использоваться для следующих преобразований:
int
в float и наоборот;int
в char
) и с изменением знака (например, из unsigned short int
в unsigned int
);Преобразования, выполняемые с помощью static_cast
, небезопасны, так как проверка типов выполняется только на этапе компиляции; во время выполнения могут преобразовываться значения несовместимых типов.
Возможные ошибки зависят от того, какое преобразование проводится. Например, при преобразовании int → enum class
переменная может заполучить недопустимое значение и программа не будет готова к этому.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .