Оператор static_cast
Оператор static_cast выполняет явное преобразование
одного типа в другой на этапе компиляции. В угловых скобках
указывается целевой тип, а в круглых скобках передается
значение или выражение, которое нужно преобразовать.
Это наиболее безопасный и предсказуемый оператор приведения
среди всех операторов явного преобразования в C++.
Оператор static_cast умеет выполнять преобразования
между встроенными числовыми типами (например, из int
в double или из double в int),
преобразования между указателями вверх и вниз по иерархии
наследования (без проверки во время выполнения), а также
преобразования между указателями и целочисленными типами
подходящего размера. При этом оператор не может убрать
константность или выполнить произвольное переосмысление
битов - для этого существуют другие операторы.
Синтаксис
static_cast<тип>(значение)
Пример
Давайте преобразуем целое число 5 в вещественное
число типа double:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
double b = static_cast<double>(a);
cout << b << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте преобразуем вещественное число 3.99
в целое число. При этом дробная часть отбрасывается:
#include <iostream>
using namespace std;
int main()
{
double a = 3.99;
int b = static_cast<int>(a);
cout << b << endl;
return 0;
}
Результат выполнения кода:
3
Пример
Давайте преобразуем символ 'a' в его числовой код
с помощью static_cast:
#include <iostream>
using namespace std;
int main()
{
char ch = 'a';
int code = static_cast<int>(ch);
cout << code << endl;
return 0;
}
Результат выполнения кода:
97
Пример
Давайте преобразуем указатель на базовый класс в указатель на производный класс. Сначала создадим классы:
#include <iostream>
using namespace std;
class Base {
public:
int x = 1;
};
class Derived : public Base {
public:
int y = 2;
};
int main()
{
Derived d;
Base* pb = &d;
Derived* pd = static_cast<Derived*>(pb);
cout << pd->x << " " << pd->y << endl;
return 0;
}
Результат выполнения кода:
1 2
Смотрите также
-
оператор
dynamic_cast,
который выполняет безопасное приведение с проверкой во время выполнения -
оператор
const_cast,
который снимает или добавляет константность -
оператор
reinterpret_cast,
который переосмысливает битовое представление -
оператор
c-cast,
который выполняет приведение в стиле языка C