c++ auto用法,C++的auto
C 11中引入的Auto主要有两个用途:自动类型推断和返回值占用。在auto C 98中标识临时变量的语义在C 11中被删除了,因为它很少被使用并且是多余的。auto的前后两个标准完全是两个概念。
1.自动类型推理
自动类型推断用于从初始化表达式中推断变量的数据类型。auto的自动类型推断可以大大简化我们的编程工作。这里有一些使用auto的例子。
#包含矢量
#包含地图
使用命名空间std
int main(int argc,char *argv[],char *env[])
//auto a;//错误,没有初始化表达式,所以无法推断A的类型。
//auto int a=10;//错误,C 11中不再存在auto临时变量的语义,这是旧标准的用法。
//1.自动帮助派生类型
auto a=10
auto c= A
auto s( hello );
//2.长类型
map int,map int,int map _;
map int,map int,int :const_iterator itr1=map_。begin();
const auto itr2=map_。begin();
自动指针=[]()
STD:cout hello world STD:endl;
返回0;
//3.当使用模板技术时,如果变量的类型依赖于模板参数,
//不使用auto将很难确定变量的类型(使用auto后,由编译器自动确定)。
模板等级T,等级U
无效乘法(T t,U u)
auto v=t * u;
2.返回值占用模板类型名T1,类型名T2
自动撰写(T1 t1,T2 t2) - decltype(t1 t2)
返回t1 t2
auto v=compose(2,3.14);//v的类型是double
3.使用注意事项
我们可以用valatile,pointer(*),reference()和右值引用()来修改auto。
auto k=5;
auto * pK=new auto(k);
auto** ppK=新汽车(
const auto n=6;
用auto声明的变量必须初始化。
auto m;//m应该初始化
auto不能与其他类型的组合一起使用。
auto int p;//这是老汽车做的。
函数和模板参数不能声明为auto。
void my function(auto parameter){ }//没有auto as方法参数
模板自动测试//完全没有意义-不允许
void Fun(T t){}
在堆上定义的变量,使用auto的表达式必须初始化。
int * p=new auto(0);//好吧
int * PP=new auto();//应该初始化
auto x=new auto();//Hmmm.没有初始化器
auto * y=new auto(9);//好吧。这里y是一个int*
auto z=new auto(9);//好吧。这里z是一个int*(它不仅仅是一个int)
我认为auto是占位符,不是自己的类型,所以不能用于类型转换或者其他操作,比如sizeof和typeid。
int value=123
auto x2=(自动)值;//不使用自动强制转换
auto x3=static_cast auto(值);//同上
自动序列中定义的变量必须始终派生为相同的类型。
auto x1=5,x2=5.0,x3= r//这太过分了.我们不能这样结合
auto不能自动派生成CV-限定符(常量可变限定符),除非它被声明为引用类型。
const int i=99
auto j=I;//j是int,而不是const int
j=100 //好吧。因为j不是常数
//现在让我们试着参考一下
auto k=I;//现在k是const int
k=100//错误。k是常数
//类似地,使用可变限定符
auto除非声明为引用,否则会退化为指向数组的指针。
int a[9];
auto j=a;
cout typeid(j)。name()endl;//这将打印int*
auto k=a;
cout typeid(k)。name()endl;//这将打印int [9]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。