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;
}