如果我将派生指针转换为基指针,这两个指针是否保证具有相同的值?

If I convert a derived pointer to a base pointer, are the two pointers guaranteed to have the same value?

本文关键字:指针 两个 是否 转换 派生 如果      更新时间:2023-10-16

假设我没有使用多重继承或虚拟继承,c++标准是否保证如果我将Derived*转换为Base*,两个指针将具有完全相同的值?例如,即使Derived和/或Base具有虚函数,下面的代码是否总是调用success() ?

Derived* d = new Derived;
Base* b = d;
if (((void*)b) == ((void*)d)) 
    success();
else
    failure();

如果基类没有虚函数而派生类有,则指针可能不同,因为基类在D对象中没有虚表指针。