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