static_cast是否正在创建新的子对象?

问题描述

由于我尚未实例化派生类对象,因此该代码在应出现运行时错误时运行良好。

#include <iostream>
using namespace std;

class Person {
public:
    void walk() { cout << "person walking" << endl; }
};
class Employee :public Person {
public:
    void work() { cout << "employee working" << endl; }
};
void main() {
    Person* p = new Person();
    Employee* e = static_cast<Employee*>(p); 
    e->work();// this is working - but why? it should fail at runtime
}

如果static_cast仅转换指针,那么如何调用子成员函数
在什么时候实例化孩子?
static_cast还在实例化对象吗?

解决方法

否。

不幸的是,您断言您的代码应“在运行时崩溃”是错误的。您的代码表现出未定义的行为,这意味着它可以执行任何操作。在这种情况下,我希望它能工作,因为函数的地址在两个对象中都是相同的,但实际上可能是出于任何原因。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...