【发布时间】:2018-02-22 14:44:38
【问题描述】:
以下 C++ 代码是否正确?
struct Base { int x; };
struct Derived : Base { int y; }
Base * b = new Base;
Derived * d = static_cast<Derived *>(b);
//below we access only d->x, but not d->y
std::cout << d->x;
如果不是,究竟是什么问题? C++ 标准对此有何评论?至少我没见过它崩溃过。
【问题讨论】:
-
x和y在这里是私有的。 -
Base b = new Base;给你一个Base。你不能只是神奇地得到一个Derived。 -
并且仅仅因为这个简单的示例有效并不意味着您可以依赖它来处理其他情况。
-
static_cast定义明确的规则可以在这里找到:en.cppreference.com/w/cpp/language/static_cast -
@NathanOliver 实际上问题并不那么明显,OP 提到他只会通过
d访问Base成员
标签: c++ language-lawyer