我在理解typeid的返回类型和实际的type_info对象之间的对应方面遇到了一些麻烦,这些对象似乎与通常的对象不同.例如,我可以……
std::cout << typeid(int).name() << std::endl;
…并从程序中获得一个体面的行为……但这不会编译……
std::type_info a(int);
std::cout << a.name() << std::endl;
编译器输出:
type_info.cpp: In function 'int main()':
type_info.cpp:6:17: error: request for member 'name' in 'a', which is of non-class type 'std::type_info(int)'
……我也不能……
if(a == typeid(int)) {/*Do something*/ } //Looong error message
我错过了什么?
解决方法:
首先,烦恼的解析:
std::type_info a(int);
a是一个函数(接受int并返回std :: type_info).
其次,std :: type_info不可复制,因此您无法按值存储它.如果符合您的需求,您可以使用参考:
const std::type_info &a(typeid(int));
如果您需要按值“实际存储std :: type_info对象(就像)”,请使用std::type_index
;它是为此而设计的:
std::type_index a(typeid(int));
std::cout << a.name() << std::endl;
标签:typeid,typeinfo,c,object 来源: https://codeday.me/bug/20190830/1768042.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。