#cpp
На этот вопрос уже даны ответы здесь: static_cast и (int) - это одно и то же? (3 ответа) Закрыт 2 года назад. Узнал о способах явного приведения типов в С++ и не совем понял чем static_cast(p) отличается от (int *) p к примеру... Допустимо и то и то - а в чем разница не знаю.
Ответы
Ответ 1
Разница между (int *) и static_castв С++ - гигантская. Каст в стиле С, это последовательные попытки применения const_cast static_cast static_cast и потом const_cast reinterpret_cast reinterpret_cast и потом const_cast Какой первый подойдет - тот и применяется. Например, static_cast не позволит вам снять с указателя константность, а обычный С-каст - позволит. const int *p = 0; static_cast (p); // Ошибка (int *) p; // OK В дополнение к этому, приведение типа в стиле С может корректно приводить указатель на объект класса вверх и вниз по иерархии даже тогда, когда базовый класс недоступен, т.е. игнорируя private и protected наследование (при условии, что приведение однозначно и нет виртуального наследования) class A {}; class B : A {}; B *pb = 0; static_cast(pb); // Ошибка (A *) p; // OK
Комментариев нет:
Отправить комментарий