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

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

最佳答案

一般情况下,基类没有这样的保证。如果为 Derived 设置正确的基类组合那么几乎可以保证基类指针不能都与Derived的地址相同指针。

因为你的类至少有一个虚函数,你可以使用dynamic_cast<void*>获取最衍生对象的地址。无论您从层次结构中的哪种类型开始,这都是相同的。

关于c++ - C++ 是否保证基引用和派生引用的地址相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924692/

相关文章:

c++ - Boost/Python 有 make_array 方法吗?

c++ - 在模板实例化和外部模板声明中使用 typedef

c++ - 扩展 std::thread 的 ref 对象传递范围

c++ - 警告 : wint to poiter cast

c++ - 前缀/后缀增量运算符

c++ - 具有基于参数类列表的使用 constexpr 的字段的 Variadic CRTP 模板类

c++ - 与 nsRunnable 链接时对 typeinfo 的 undefined reference

c++ - 提供纯虚函数的定义

c++ - boolean 值对位域的优势

c++ - SSL_connect() 和 SSL_accept() 调用