Почему типизация объекта не меняет его адрес?
Поскольку типизация абсолютно не влияет на исходный объект 1 .Приведение типов всегда создает новый объект (возможно другого типа) или ссылку.Кроме того, нет операции, которая могла бы изменить адрес любого объекта.Объект хранится в одном адресе в течение всего времени его жизни.
Если результатом приведения типа является ссылка, то эта ссылка может ссылаться на другой объект по другому адресу, в частности, при преобразовании в ссылку на объект.введите ту же иерархию наследования.
1 Технически, конструктор преобразования или оператор преобразования может изменить исходный объект, но это будет ужасно необычно.
Где хранится информация о типе объекта?
Информация о типе «сохраняется» компилятором во время компиляции программы.В general информация не должна храниться самой программой.
В конкретном случае полиморфных типов некоторая информация о типе объектахранится в памяти программы для поддержки dynamic_cast
и динамического typeid
.Он хранится в любом месте, выбранном реализацией языка.
Я только что проверил это, используя qobject_cast
В C ++ нет такой вещи, как qobject_cast
.Возможно, вы используете какую-то библиотеку.