Операторы reinterpret_cast и const_cast | Обучение программированию онлайн

Опубликовано: 01.09.2018

Нам осталось рассмотреть еще операторы reinterpret_cast и const_cast . Эти операторы используются намного реже. Вначале рассмотрим reinterpret_cast.

Оператор reinterpret_cast является небезопасным, так как позволяет осуществлять бесконтрольное преобразование типов, которые запрещены правилами C++. Рассмотрим пример.

#include <iostream> using namespace std; class First { public: void info() { cout<<"First"<<endl; } }; class Second { public: void info() { cout<<"Second"<<endl; } }; void main() { First first; Second second; First *pfirst; Second *psecond; pfirst = reinterpret_cast<First*>(&second); pfirst->info(); psecond = reinterpret_cast<Second*>(pfirst); psecond->info(); }

Мы можем преобразовать указатель одного типа к указателю другого типа, хотя класс Second не является производным от First. Использование оператора reinterpret_cast лучше вообще избегать или использовать только в том случае, если это реально обоснованно.


[C++] Dynamic_cast Преобразование типов

Теперь рассмотрим оператор const_cast . Он используется, когда необходимо снять статус константности с переменной или объекта. Рассмотрим пример.

#include <iostream> using namespace std; void main() { const int t = 99; int *ptr; ptr = const_cast<int*>(&t); }

Адрес константы t можем присвоить только указателю на константу. Но, указатель ptr представляет собой обычный int указатель. Поэтому, с помощью оператора const_cast мы можем указателю ptr присвоить адрес константы t.

Вы можете оставить комментарий ниже.
rss