Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
#include <iostream>
struct Shape {
virtual int sides() const { return 0; }
};
struct Circle : public Shape {};
struct Square : public Shape {};
int main() {
Square sq;
Shape* p = &sq;
std::cout << (dynamic_cast<Circle*>(p) == nullptr) << '\n';
}1
- Ждать
0:dynamic_castпроверяет настоящий тип объекта во время работы программы;pуказывает наSquare, а не наCircle, поэтому результат —nullptr. - Ждать неопределённого поведения:
dynamic_castне приводит к неверному типу — если объект не подходит,dynamic_castвозвращаетnullptr.
- Что вернёт здесь
dynamic_cast<Square*>(p)? - Почему этот
dynamic_castперестаёт компилироваться, еслиsidesнеvirtual?