用于虚拟继承的RTTI(无虚拟功能)

时间:2018-09-25 23:50:03

标签: c++ gcc rtti abi

我注意到Clang和GCC都为具有虚拟继承的非多态类型生成typeinfo。据我了解,这不是标准要求。他们为什么这样做,以及如何使用它?

示例:

#include <iostream>
#include <string>
#include <typeinfo>

struct VirtualBase {};
struct Derived : virtual VirtualBase{};

int main()
{
    Derived md;
    uintptr_t **vptr = (uintptr_t **)&md;
    std::type_info * tinfo = (std::type_info *)(*vptr)[-1];
    std::cout << tinfo->name() << "\n";
    return 0;
}

输出:7Derived

阅读ABI文档后,我期望收到一个段错误而不是答案:

https://itanium-cxx-abi.github.io/cxx-abi/abi.html#vtable-components

  

typeinfo指针是多态类的有效指针,即   具有虚函数的代码,对于非多态类为零。

0 个答案:

没有答案