SpaceZero
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Тут немного другое - значение преобразуется в указатель. Хотя вся эта идея с static_cast смахавает на чей-то бред. Вместо того, чтобы сделать полноценную проверку у обычного приведения типов, сделали дополнительный оператор (да еще корявый по синтаксису), в котором "все хорошо". | C++ более строг к типам данных в отличие от C. static_cast, const_cast, reinterpret_cast (и реже используемый dynamic_cast), вместо одного оператора () приведения типов для всех случаев жизни в C, введены для того, чтобы, как отмечено выше, было бы "Сложнее случайно накосячить". Компилятор к сожалению не настолько "умён", чтобы понять, а действительно ли требовалось приведение переменной к типу указателя: Код: int i=5; int *p1=(int *)i; /* а может преобразование в указатель не требовалось? */ | При использовании конкретных кастинг операторов ошибка будет обнаружена: Код: int i=5; int *p2=static_cast<int *>(i); // ошибка, преобразование в указатель не требовалось?! | Читающему код, а также компилятору более ясны намерения автора в следующем коде: Код: int i=5; int *p2= reinterpret_cast<int *>(i); // Знаю, что делаю! Преобразовать в указатель! |
| Всего записей: 32 | Зарегистр. 25-05-2007 | Отправлено: 09:00 21-12-2011 | Исправлено: SpaceZero, 19:03 21-12-2011 |
|