Casting операторы в С++

c++

Casting операторы — операторы явного преобразования типов данных в С++. Неявный кастинг в CPP осуществляет среда исполнения приложений. Для этого достаточно написать, например int m = (int) d;, где d — double. Второй вид написания: int m = int (d);, где d — double. Явное преобразование в С++ не применимо к Классам (Class) и указателям на Классы.

Для явного приведения типа (Casting) в С++ существует четыре оператора: reinterpret_cast, static_cast, dynamic_cast, const_cast.

Формат представления:
[code]
static_cast<new_type>(выражение)
[/code]

reinterpret_cast

Оператор переводит указатель в любой другой тип указателя. Возможен кастинг указателя в int и так далее.
[code]
class A {};
class N {};
A * a = new A;
N * n = reinterpret_cast<N *>(a);
[/code]

static_cast

Позволяет выполнить любой кастинг, который может быть неявно выполнен. Применяется для преобразований указателя из любого класса в базовый класс и наоборот. В таких случаях оператор не контролирует результат выполнения. static_cast также используется в стандартных преобразованиях между основными типами данных.
[code]
#include<iostream>

using namespace std;

int main()
{
double d = 5.67;
int i = static_cast<int>(d);

system("pause");
}
[/code]

dynamic_cast

Оператор используется исключительно с указателями и ссылками на объекты. dynamic_cast проверяет, действительно ли выполнено приведение. Проверка на возвращение полного объекта, которому соответствует требуемый тип. Контролируется в время исполнения. Если указатель, над которым произведен кастинг в С++, не является указателем, а действительно полный объект требуемого типа, то результат возвращение указателя со значением NULL.

const_cast

Оператор const_cast работает с атрибутами, которые квалифицированны в const, в передаваемом на обработку объекте.
[code]
class A {};
const N *n = new A;

N *b = const_cast<A *>(n); // тоже самое, что b=n;
[/code]

1 Star2 Stars3 Stars4 Stars5 Stars (3 голосов, средний:5,00 из 5)
Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.
Оставить комментарий