C++ 是否保证基地址和派生引用的地址相等?我写了一些代码,似乎基于这个假设工作,但我想得到确认。如果有保证,如果有人能指出我忽略的标准部分,那将是锦上添花。提前致谢。
示例
#include <iostream>
#include <map>
struct Base {
virtual ~Base() {}
};
struct Derived : Base {
virtual ~Derived() {}
};
int main() {
Derived derived;
Base &base = derived;
std::map<void*, int> testMap;
testMap[&base] = 0;
if (testMap.count(&derived) > 0) {
std::cout << "addresses match\n";
}
return 0;
}
最佳答案
一般情况下,基类没有这样的保证。如果为 Derived
设置正确的基类组合那么几乎可以保证基类指针不能都与Derived
的地址相同指针。
因为你的类至少有一个虚函数,你可以使用dynamic_cast<void*>
获取最衍生对象的地址。无论您从层次结构中的哪种类型开始,这都是相同的。
关于c++ - C++ 是否保证基引用和派生引用的地址相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924692/