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;
}
答案 0 :(得分:0)
一般来说基类没有这样的保证。如果为Derived
设置正确的基类组合,则几乎可以保证基类指针不能与Derived
指针的地址相同。
由于您的类至少有一个虚函数,因此您可以使用dynamic_cast<void*>
来获取派生最多的对象的地址。无论您从哪个类型开始,这都是相同的。