贡献者: addis
typeid 关键字必须使用 <typeinfo> 头文件
const std::type_info &tid = typeid(变量名或类型)
sizeof(std::type_info) 用 g++ 测试是 16 字节。
tid.name() 会返回一个表示该类型的字符串,取决于编译器,且不一定是 human readable 的(例如 g++)。
tid.hash_code() 返回类型的 hash,类型是 size_t
typedef 和 using 都不会改变 typeid,也就是 typeid(A) == typeid(B)。
gdb 用 p 变量 显示类型和值,ptype 变量 或 pt 变量 显示类型。检查长度用 p sizeof(变量)。typeid 一般只用于检查两个类型是否相同或者一个变量是否是某个类型。
tid1 == tid2 可以判断是否是同一类型。这里加上 const 或者 &(或者两者)视为同一类型。但加上 *(指针)不是同一类型。
B 继承 A,定义 B b; A *pa = &b;,那么 typeid(*pa) == typeid(b) 结果是什么呢?这取决于 A,B 的具体定义。
g++ -std=11 测试,如果 A 中没有 virtual 函数(即不存在多态),那么返回 false。
A 不是抽象类但有 virtual(存在多态)则返回 true。
A 是一个抽象类(即存在 pure virtual function)则会产生编译错误,因为 typeid 无法对抽象类使用。
A 不是抽象类但有 virtual(存在多态)则返回 true。
typeof() 一般来说和是静态编译的,但如果使用了多态,那么将变为一个动态操作。
 
 
 
 
 
 
 
 
 
 
 
友情链接: 超理论坛 | ©小时科技 保留一切权利