浅谈typeid().name()获取类型名

#include<iostream>
#include<typeinfo>   //需要添加的头文件
using namespace std;

int main()
{
        //typeid().name()不仅可以可以获取变量类型,还可以获取、函数、类的数据类型名
        //对于非引用类型,typeid().name()是在编译期间识别的,只有引用类型在运行时识别
	int a;
	cout<<typeid(a).name()<<endl;   //int
        cout<<typeid(typeid(a).name()).name()<<endl;   //const char *
	const int b=3;
	cout<<typeid(b).name()<<endl;   //int
	int &c=a;
	cout<<typeid(c).name()<<endl;   //int
	int *d;
	cout<<typeid(d).name()<<endl;   //int *
	const int *e;  //常指针可以不用初始化
	cout<<typeid(e).name()<<endl;   //const int *
	const int &f=a;  //引用必须必须初始化
	cout<<typeid(f).name()<<endl;   //int
        
        return 0;
        //经过验证可以看出const修饰变量是不影响变量类型的,但是const修饰指针,是影响其类型的
        //const修饰引用不会改变引用变量的类型
        //对于cout<<typeid(typeid(a).name()).name()<<endl;返回了存储类型名的字符串
}

那么能否用typeid().name()的返回值定义变量呢?我们来试一试

int main()
{
	int a;
	typeid(a).name() b;  //用typeid(a).name()获取的类型定义变量  
        //结果是error
}

答案显然是不可以的,为什么呢?最上面的例子可以看出返回了一个const char *,是一个地址,所以就没有办法用它定义变量。

猜你喜欢

转载自blog.csdn.net/Eunice_fan1207/article/details/81567956