请考虑以下代码:
class base {
public:
base() = default;
virtual int foo() { return 0; }
};
class derived : public base {
public:
derived() = default;
virtual int foo() { return 1;}
};
使用Clang 3.3进行编译我得到了vtable的以下输出:
__ZTV7derived:
.long 0 <--- what is this?
.long __ZTI7derived
.long __ZN7derived3fooEv
如果我添加开关-fno-rtti
,我会得到:
__ZTV7derived:
.long 0 <--- what is this?
.long 0 <--- type info removed by -fno-rtti
.long __ZN7derived3fooEv
这是有道理的,因为TypeInfo现在无效,但第一个.long 0
指的是什么?另外,为什么不-fno-rtti
完全删除类型信息而不是仅仅删除它?我正在考虑手动编写一个通行证,但我想首先了解它的含义(我正在从嵌入式平台中挤出字节)