所述typeid表示C++ RTTI操作者还为C++关键字.它返回一个std::type_info保存(动态)类型特定信息的对象.
根据我从各种来源的理解,一个必须包括<typeinfo>在使用时typeid,否则该程序是不正确的.事实上,如果我不包含前面提到的标题,我的gcc5.2编译器甚至不编译程序.我不明白为什么要使用C++ 关键字强制执行标头包含.我理解,只要我们在该标头中使用声明/定义的对象,但typeid不是类类型,就强制要求标头.那么包含标题的执行背后的原因是什么<typeinfo>?
typeid 并不是唯一需要标题的人
new<new>在某些情况下也需要标题
注意:隐式声明不会引入名称std,std :: bad_alloc和std :: size_t,或者库用于声明这些名称的任何其他名称.因此,在不包括头部的情况下引用这些函数之一的新表达式,删除表达式或函数调用是格式良好的.但是,引用std,std :: bad_alloc和std :: size_t是不正确的,除非通过包含适当的头声明了名称. - 注意
另一个sizeof返回std :: size_t的运算符(它实际上不需要包含头,但我的观点是它使用了一个别名,它也在头文件中定义)
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;
}
Run Code Online (Sandbox Code Playgroud)
IMO,它的C++标准设计技术,保持编译器整洁,干净和轻量级