Является ли в C ++ неопределенным поведением, если объект базового класса создается как базовый объект , а затем понижается до производного объекта?
Конечно, я бы предположил, что определенно должно быть неопределенным поведением, потому что у объекта производного класса могут быть переменные-члены, которых нет у базового класса.Таким образом, эти переменные на самом деле не существовали бы, если бы экземпляр класса создавался как базовый объект, а это означает, что доступ к ним через указатель на производный класс должен был бы вызвать неопределенное поведение.
Но что, если класс Derived просто предоставляетдополнительные функции-члены, но не включают в себя дополнительные данные члена?Например:
class Base
{
public:
int x;
};
class Derived : public Base
{
public:
void foo();
};
int main()
{
Base b;
Derived* d = static_cast<Derived*>(&b);
d->foo(); // <--- Is this undefined behavior?
}
Эта программа вызывает неопределенное поведение?