Closed. This question needs details or clarity。它当前不接受答案。












想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。

3个月前关闭。



Improve this question




这段代码应该在运行时错误时运行良好,因为我尚未实例化派生类对象。
#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仅强制转换指针,那么如何调用子成员函数?
在什么时候实例化 child ?
static_cast还在实例化对象吗?

最佳答案

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

关于c++ - static_cast是否正在创建新的子对象? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63755481/

10-12 12:46
查看更多