C++11 auto&decltype

1、 auto

C++11新标准引入了auto类型说明符,它让编译器通过初始值来推断变量的类型,因此auto定义的变量必须有初始值:

auto a=1;  //正确,a的类型为整型
auto b;  //错误,b没有初始值,无法推断b的类型

当使用auto声明多个变量时,该语句中所有变量的初始基本数据类型必须一样:

auto a=1,b=2;  //正确,a、b都是整型
auto c=1,d=1.4;  //错误,a、b类型不一样

当初始值是引用时,编译器以引用对象的类型作为auto的类型:

auto i=0,&r=i;
auto a=r;  //r是一个整数

另外,auto一般会忽略顶层const,保留底层const:

const int i=0,&r=i;
auto a=i;  //a是一个整数(i的顶层const被忽略掉了,如果没有忽略,a应该是整型常量)
auto b=r;  //b是一个整数(r是i的别名)
auto c=&i;  //c是一个指向整数常量的指针(r是底层const,保留)

如果希望推断出的auto类型是一个顶层const:

const auto d=i;  //i的推演类型是int,d是const int

2、decltype

类型说明符decltype能选择并返回操作数的数据类型,编译器通过分析表达式得到它的类型,不用计算表达式的值:

decltype(f()) sum=x;  //sum的类型是函数f的返回类型

在处理顶层const和引用时与auto不同

const int i=1,&r=i;
decltype(i) a=0;  //a的类型是const int,此时顶层const 被保留)
decltype(r) b=a;  //b的类型是const int&

另外还有一种情况需要注意,如果decltype表达式中的变量名加上一层或多层括号,则表示引用

decltype((i)) c; //错误,c是一个引用,必须初始化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值