C++/Ключові слова/static cast

Матеріал з Вікіпідручника
Перейти до навігації Перейти до пошуку

Ключове слово static_cast використовується для будь-якого звичайного явного приведення типів даних. Приведення, яке відбувається на основі статичної, відомої під час компіляції, інформації про тип. Воно застосовується для приведення будь-яких числових типів, вказівників і посилань вверх по ієрархії наслідування типів, перетворень із за допомогою унарного конструктору а також із оператором приведення типів. При приведенні між числовими типами жодних перевірок під час виконання програми не відбувається, якщо данні можуть без втрат бути представлені в вихідний тип. Перетворення з використанням унарного конструктора будуть виконані, навіть якщо він оголошений з ключовим словом explicit.

Синтаксис
TYPE static_cast<TYPE> (object);

Також можна приводити між собою вказівники і посилання в сумісних типах ієрархії, у випадках коли таке перетворення можливе. Наприклад, за допомогою оператора можна привести тип void* до відповідного вказівного типу або навпаки. Ніяких перевірок під час виконання програми відбуватися не буде.

BaseClass* a = new DerivedClass();
static_cast<DerivedClass*>(a)->derivedClassMethod();
Звичайні випадки використання статичного приведення типів

При виконанні арифметичний операцій з різними типами даних без явного приведення типів призводить до того, що компілятор буде приводити всі значення змінних в наявному виразі до типу, в якого сама висока точність значення.

В результаті наступного цілочисленного ділення повертається значення 2.

float a = 5 / 2;

Для того, щоб добитися бажаної поведінки, вам необхідно привести одну або дві числові константи до типу float.

float a = static_cast<float>(5) / static_cast<float>(2);

Або вам треба задати початкове значення однієї або двох констант у вигляді float.

float a = 5f / 2f;