概述
今天学到了c++的【推断类型】,做个笔记。
推断类型,就两个关键字,auto和typeid。
1、auto关键字
auto作用是用于声明变量为自动变量,auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型。
2、typeid关键字
在c++中,typeid用于返回指针或引用所指对象的实际类型。
注意:typeid是操作符,不是函数!
运行时获知变量类型名称,可以使用 typeid(变量).name()。
3、示例及讲解:
(1)示例:
auto a{ 200 } ;
auto b{ 100LL } ;
std::cout << "变量a的类型为:" << typeid(a).name() <<std::endl;
std::cout << "变量b的类型为:" << typeid(b).name() <<std::endl;
输出结果为:
变量a的类型为:int
变量b的类型为:_int64
(2)问题:在这里,为啥不显示b的类型为long long
,而是_int64
??
答:其实,在底层,longlong类型
就等同于_int64
。
(3)为了回答第(2)个问题,我们继续往下学习。这时候,我们输出一个long类型
看看就知道怎么回事了。
auto a{ 100 } ; //int类型
auto b{ 200LL } ; //longlong类型
auto c{ 300L } ; //long类型
std::cout << "变量a的类型为:" << typeid(a).name() <<std::endl;
std::cout << "变量b的类型为:" << typeid(b).name() <<char(10); //这里的char(10)等同于std::endl。就是换行。
std::cout << "变量c的类型为:" << typeid(c).name() <<std::endl;
输出结果为:
变量a的类型为:int
变量b的类型为:_int64
变量c的类型为:long
(4)在(3)的基础上,我们看看char 32
auto a{ 100 } ; //int类型
auto b{ 200LL } ; //longlong类型
auto c{ 300L } ; //long类型
auto d{ U'A' } ; //讲解用ut32的标准来输出,看看结果如何
std::cout << "变量a的类型为:" << typeid(a).name() <<std::endl;
std::cout << "变量b的类型为:" << typeid(b).name() <<char(10); //这里的char(10)等同于std::endl。就是换行。
std::cout << "变量c的类型为:" << typeid(c).name() <<std::endl;
std::cout << "变量d的类型为:" << typeid(d).name() <<char(10);
输出结果为:
变量a的类型为:int
变量b的类型为:_int64
变量c的类型为:long
变量d的类型为:char_32t //用ut32的标准来输出,完美无缺,和我们前面需要的结果一致。
关于auto和typeid的含义以及用法为以上的,通过敲代码来理解一下。