Операторы reinterpret_cast и const_cast

Нам осталось рассмотреть еще операторы 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 лучше вообще избегать или использовать только в том случае, если это реально обоснованно.

Теперь рассмотрим оператор 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.

Комментарии и пинги к записи запрещены.

Комментарии закрыты.

Яндекс.Метрика