c++ - 为什么 name() 函数返回的字符串是实现定义的?

标签 c++ rtti typeid

考虑以下示例:

#include <iostream>
#include <typeinfo>
int main()
{
    int a=9;
    std::cout << typeid(a).name() << '\n';
}

g++ 4.8.1 上的输出:i

MSVS 2010 的输出:整数

为什么输出依赖于编译器?这背后的原因是什么?为什么它保留为实现定义?为什么所有编译器的输出不同? C++ 标准是否明确说明了这一点?

最佳答案

因为编译器以不同方式表示类型并且不使用相同的内部结构。

G++ 字符串是 mangled类型名称,返回(而不是分解它)工作更少,效率更高。要求编译器分解这些字符串会增加更多工作。该标准让实现者决定是否要这样做。

如果标准规定了它,那么它还必须指定各种事情,比如是说 signed long 还是只是 long 以及如何表示复杂的模板实例化这取决于其他类型和常量。标准化这些字符串的好处很小,但工作量很大。

关于c++ - 为什么 name() 函数返回的字符串是实现定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32354575/

相关文章:

C++ - 方法/成员访问

delphi - 如何使用RTTI在Delphi中获取访问字段?

c++ - Typeinfo 如何在多态集合中获取类的名称/ID?

c++ - 派生类和类型检查

c++ - 库 CMake 项目的目录结构

C++ SQLite3 准备删除语句不工作

c++ - 重载运算符 & 以产生 int[][] 的总和

德尔福XE6 DLL : Unwanted export: TMethodImplementationIntercept

c++ - 异构数组中的元素可以知道它是什么模板类型吗?

c++ - typeid 运算符忽略 cv 限定符背后的基本原理是什么