C ++是否保证base和派生引用的地址相等?

时间:2014-04-07 23:02:27

标签: c++

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;
}

1 个答案:

答案 0 :(得分:0)

一般来说基类没有这样的保证。如果为Derived设置正确的基类组合,则几乎可以保证基类指针不能Derived指针的地址相同。

由于您的类至少有一个虚函数,因此您可以使用dynamic_cast<void*>来获取派生最多的对象的地址。无论您从哪个类型开始,这都是相同的。