typeid
表示C ++ RTTI运算符也是C ++关键字。它返回一个std::type_info
对象,该对象包含(动态)类型特定信息。
根据我从各种来源的理解,使用<typeinfo>
时必须包含typeid
,否则程序就会形成错误。事实上,如果我不包含前面提到的标题,我的gcc5.2编译器甚至不编译程序。我不明白为什么要使用C ++ 关键字的标题包含。我理解,只要我们在该标头中使用声明/定义的对象,就强制使用标头,但typeid
不属于类类型。那么强制执行包含标题<typeinfo>
?
答案 0 :(得分:8)
下一段:
typeid表达式是lvalue表达式,它引用一个对象 具有静态存储持续时间的多态类型const std :: type_info或从中派生的某种类型。
因为它是一个左值表达式,它使用reference initialization来声明std::type_info
的初始值设定项。 <typeinfo>
包含that object的定义。
答案 1 :(得分:5)
typeid
不是唯一需要标题
new
还需要标头<new>
注意:隐式声明不会引入名称std,std :: bad_alloc和std :: size_t,或者库用于声明这些名称的任何其他名称。因此,在不包括头部的情况下引用这些函数之一的新表达式,删除表达式或函数调用是格式良好的。但是,引用std,std :: bad_alloc和std :: size_t是不正确的,除非通过包含适当的头声明了名称。 - 注意
See abhay's answer on new keyword
另一个返回std :: size_t的运算符sizeof
(它实际上不需要包含头,但我的观点是它使用的是一个也在头文件中定义的别名)
C ++§5.3.3
sizeof和sizeof ...的结果是std :: size_t类型的常量。 [注意:std :: size_t在标准标题
<cstddef>
中定义(18.2).- end note]
typeid
使用在<typeinfo>
标题
标题<typeinfo>
简介
namespace std {
class type_info;
class bad_cast;
class bad_typeid;
}
See section 18.7 on iso cpp paper
IMO,它的C ++标准设计技术,保持编译器整洁,干净和轻量级