C++ 获取变量和表达式的数据类型:typeid(x).name() 和 decltype(x)

1,090 阅读1分钟

typeid(x).name() 和 decltype(x) 都可以要来获取变量或者表达式 x 的数据类型。

二者的区别在于:

typeid(x).name() 可以返回 x的数据类型,返回的意思是可以输出。

decltype(x) 仅仅查询的 x类型,但不会返回数据类型,即不能打印。

比如:

cout<<typeid(1.5).name() ; //输出double
cout<<decltype(1.5) ; //报错
decltype(1.5) a = 2.3 ; //正确,decltype(1.5) 是double类型

typeid(x).name() 可以返回变量、函数、类的数据类型名,功能非常强大,具体用法可以参考 C++学习7:用typeid().name()获取类型名

简单的代码示例:

#include <iostream>
#include <vector>
using namespace std;


int main()
{
	vector<int> v1 = { 1,2,3,4 };
	vector<int>::size_type a = v1.size();
	string s1 = "abcdefg";
	string::size_type b = s1.size();
	cout << typeid(a).name() << endl;     //unsigned __int64
	cout << typeid(b).name() << endl;     //unsigned __int64

	int c = 0;
	cout << typeid(c).name() << endl;         //int
	cout << typeid(1+1.5).name() << endl;     //double

	return 0;
}