为什么type_info :: name()未指定?

时间:2010-08-25 08:45:31

标签: c++ typeinfo

我完全清楚std::type_info::name()的返回值是实现定义的。

来自C ++标准(ISO / IEC 14882:2003§18.5.1.7):

  

返回:实现定义的NTBS。

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

2 个答案:

答案 0 :(得分:4)

基本上,如果某个实现决定他们不能或不想支持RTTI,那么他们只能return "";。如果标准强制它返回某些内容,那么它们可能会杀死任何能够为RTTI的资源不存在或者想要被禁用的环境(例如微芯片)的兼容编译器的能力。

让我们不要忘记我们不想在任何编译器上强制执行A​​BI /名称修改方案。

这遵循C ++哲学“你不为你不需要的东西买单。”

答案 1 :(得分:2)

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

为什么它们都不是明显的名称空间:: class :: functions等?一些当前的实现可能历史上发现它很容易使它与链接器所需的受损名称匹配,偏执(或偏执客户端)内存使用等等。