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;