gpt4 book ai didi

c++ - 指向基类的指针总是 <= 指向派生类的指针吗?

转载 作者:可可西里 更新时间:2023-11-01 15:50:15 25 4
gpt4 key购买 nike

我想知道 C++ 标准是否保证 单一 继承使对象向上“增长”,即 class Base和一个 class Derived: public Base , 和一个指针 Derived* ptr , dynamic_cast<Base*>(ptr) 的结果将始终在数值上小于或等于 ptr .

最佳答案

没有。内存布局是实现细节。

也就是说,假设没有虚函数,我不知道有任何实际不这样做的实现。如果您在 Derived引入一个虚函数(但在 Base 中没有),虚表指针可以 (取决于实现)放在 Base 字段之前(使 Base* 大于 Derived*)。

澄清:

上面的示例是特定于 Visual C++ 的。您可以使用以下代码查看它:

class Base {
int X;
};

class Derived : public Base {
virtual void f() {
}
int Y;
};

int main() {

Derived d;
Derived* d_ptr = &d;
Base* b_ptr = dynamic_cast<Base*>(d_ptr); // static_cast would be enough BTW.

bool base_smaller_or_equal = (ptrdiff_t)b_ptr <= (ptrdiff_t)d_ptr;

return 0;

}

base_smaller_or_equal 在 Visual C++ 下将为 false。从@enobayram 的评论来看,在 GCC 下应该是 true

无论如何,它是一个实现细节,不可依赖。

关于c++ - 指向基类的指针总是 <= 指向派生类的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062299/

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