@Gad_h

Как работает static cast?

Что будет если использовать static_cast в C++ не со стандартными не полиморфными классами, стандартными в смысле как int, double и т.д. ? То есть используя классы разные классс со своими блекджеками и функциями.
  • Вопрос задан
  • 1100 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MiiNiPaa
Пытается произвести преобразование используя определённые операторы преобразования и конструкторы. Если подобного преобразования нет, выдаст ошибку.

С указателями на классы связанные отношением наследования всё несколько сложнее:

1) Преобразование указателя на дочерний класс в указатель на базовый.
static_cast безопасно приводит типы: возвращаемое значение — указатель на базовый субобъект дочернего класса.

2) Преобразование указателя на базовый класс в указатель на дочерний.
Преобразование всегда успешно (нет ошибки компиляции). Если базовый указатель указывает на субобъект дочернего класса, приведение успешно и безопасно. Если базовый указатель не указывает на субобъект дочернего класса, то результат приведения не определён и может случится что угодно.
struct base 
{};
struct derived: base
{};
//...
derived* d = new derived;

//Работает, безопасно
base* b = static_cast<base*>(d);

//Работает, безопасно так как b на самом деле указывает на derived
d = static_cast<derived*>(b);

b = new base;
//Undefined Behavior. Программа превращается в тыкву.
d = static_cast<derived*>(b);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы