为什么typeid().name()输出乱码?怎么解决?

粽锁粥汁,C++提供了typeid关键字以便我们查看变量类型。typeid()会返回一个type_info类型的对象,其中使用最多的就是name()方法。

今有一人,欲验其虚实,学其方法,typeid以求类型,调用name()方法以求名称,输出于cout之流,见乃乱码,不知其为何物也。

/**
 * 操作系统:Windows 7 x64
 * 编译器:MinGW-W64 (gcc version 8.1.0) - g++
 */

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
     cout << typeid(int).name() << endl
          << typeid(string).name() << endl
          << typeid(double).name() << endl;
     int a;
     string s;
     cout << typeid(a).name() << endl
          << typeid(s).name() << endl;
     return 0;
}

输出如下:

i
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
d
i
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

这到底是怎么回事?怎么解决问题,让name()正常输出?

我的也这样,烦死啦。。。。

我解决了,原因是编译器不同导致显示的内容不同。
vs之前能够正常显示,是因为vs用的不是g++,这篇文章能够解决问题
https://blog.csdn.net/wangqingchuan92/article/details/119380895

C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html