gpt4 book ai didi

c++ - static_cast 编译没有错误?

转载 作者:行者123 更新时间:2023-12-02 10:01:38 27 4
gpt4 key购买 nike

如果我有两个类:

1) 员工

2) 工程师是派生 从员工

3) 经理是派生 从员工

我被告知(并自己尝试过)以下内容无法编译:

Employee employee("John Smith");
Engineer* ptr2 = &employee; // error

因为员工肯定不是工程师。

但是为什么以下运行正常:
Manager* m = ...;
Employee* emp = m;
Manager* m1 = static_cast<Manager*>(emp);//Ok

为什么我现在可以将 Employee 转换为 Manager?

最佳答案

Manager* m = ...;
Employee* emp = m;


这将执行 implicit cast来自 Manager*Employee* .这是允许的,因为指向派生类类型的指针可以是 隐含 转换为指向其基类的指针。 (有一些警告,这些都不适用于你的情况。所以我选择坚持简单的版本。)它是允许的,因为结果保证与起点一样有效。

Manager* m1 = static_cast<Manager*>(emp);//Ok


这将执行 static cast来自 Employee*Manager* .这是允许的,因为指向基类的指针可以是 明确 转换为指向派生类的指针(称为向下转换)。 只有当所讨论的对象实际上是派生类时,才能安全地使用这种静态转换。 当您选择使用 static_cast 明确地向下投时,您可以朝自己的脚开枪。 . (安全的向下转换版本由 dynamic_cast 提供。)

关于c++ - static_cast 编译没有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62293326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com