C++ 为什么类型_info::name()未指定?

C++ 为什么类型_info::name()未指定?,c++,typeinfo,C++,Typeinfo,我完全知道std::type_info::name()的返回值是由实现定义的 从C++标准(ISO/IEC 1488~2003年第18.5.1.7): 返回:实现定义的NTB 我的问题是:为什么?如果标准规定了返回值应该是什么,那么这个成员函数不是更有用吗?基本上,如果一个实现决定不能或不想支持RTTI,它们可以返回“”。如果标准强制它返回某些内容,那么在RTTI资源不存在或想要被禁用的环境中(例如微芯片),他们可能会扼杀任何拥有兼容编译器的能力 不要忘记,我们不想在任何编译器上强制使用ABI/

我完全知道
std::type_info::name()
的返回值是由实现定义的

<>从C++标准(ISO/IEC 1488~2003年第18.5.1.7):

返回:实现定义的NTB


我的问题是:为什么?如果标准规定了返回值应该是什么,那么这个成员函数不是更有用吗?

基本上,如果一个实现决定不能或不想支持RTTI,它们可以
返回“”。如果标准强制它返回某些内容,那么在RTTI资源不存在或想要被禁用的环境中(例如微芯片),他们可能会扼杀任何拥有兼容编译器的能力

不要忘记,我们不想在任何编译器上强制使用ABI/名称损坏方案


<>这是遵循C++哲学的:“你不为你不需要的东西付费。”

< P>我们谈论的是厂商返回不同的字符串,我认为这只是“我们这样做,你改变”“不,我们这样做,你改变”编译器供应商之间的事情。即使是标准委员会也不想惹恼编译器团队,创建一些中立的、没有任何供应商采用的新标准往往意味着找到一些毫无意义的东西


为什么它们不是所有明显的名称空间::类::函数等等?一些当前的实现可能在历史上发现,让它匹配链接器所需的损坏名称、偏执狂(或有偏执狂客户端)重新使用内存等非常方便。我想,答案是给编译器一些自由度。既然你不能在编译器之间混合二进制文件,那么只要它在编译器中是一致的,就没什么大不了的。RTTI参数+1。但是,如果支持RTTI,标准不能规定返回动态类型的未混合名称,如果不支持RTTI,则返回静态类型的未混合名称吗?@Job:可能,但是如何格式化类型名称?字符串存储在哪里?我同意有一个一致的或至少可靠的
name()
结果会很好,但考虑到编译器的性质,未指定是最好的选择。(他们如何处理类型是他们的事,我们无法确定他们如何处理,目标平台是什么,以及这些平台是否允许有意义的
name()
结果。)我认为
0
不是有效的NTB,所以这样的实现至少应该
返回“”
。我认为这是一个错误的参数。真正的哲学更像是“你不用的东西你不用付钱”。微芯片编译器可以记录“std::type_info::name()非常昂贵(2KB),应该避免使用。”。这是完全合规的。这样的系统的链接器应该可以发现std::type_info::name()没有被调用,关联的字符串表也没有被使用。