考虑以下示例:
#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/