c++ auto类型说明符

文章来源 链接

c++ auto类型说明符

编程是常常需要把表达式的值赋给变量,这就要求子再声明变量的时候清楚知道表达式的类型,然而要做到这一点并不容易,有时候根本做不到。为了解决问题,c++11标准引入了auto类型说明符,用它就能让编译器替我们去分析表达式的类型。

与原来那些类型说明符不同,auto让编译器通过初始值来推算变量类型。显然,auto定义的变量必须要有初始值。

使用auto 具有以下好处:

  1. 可靠性:如果表达式的类型发生更改,也能工作。
  2. 性能:确保不会进行转换。
  3. 效率:代码变得高效。
  4. 可用性:不必担心类型名称拼写困难和拼写有误。
auto it=val1+val2;///有val1和val2相加的结果推断it的类型。
auto i=0,*p=&i;///i是整数,p是整型指针

使用auto 能在一条语句声明多个变量。但是一条语句只能有一个基本数据类型,所以该语句中所有变量的初始基本数据类型都必须一致

auto it=0,pp=3.14///错误

编译器推断出的auto 类型有时候和初始值类型并不完全一样,编译器会适当地改变结果类型使其更符合初始化规则,例如:

  • 使用auto 会删除引用
int count =10 ;
int &countref = count ;
auto myauto = countref;

countref=11;
cout<<count<<" "; //print 11

myauto =12;
cout<<count<<endl; //print 11

你可能会认为myauto是一个int引用,但她不是,它只是一个int,因为输出为 11 11,而不是11 12;如果auto尚未删除此引用,则会出现此情况。

  • const 限定符
    先引入一种表述:顶层 const 表示指针本身是一个常量,底层 const 表示指针所指的对象是一个常量。一般auto 会忽略掉顶层 const,同时底层const则会保留下来,例如:
int i = 0const int ci = i, &cr = ci;
auto b = ci;///b是一个整数(ci的顶层const特性被忽略掉)
auto c = cr;///c是一个整数(cr是ci的别名,ci本身是一个顶层const)
auto d = &i;///d是一个整型指针(整数的地址就是指向整数的指针)
auto e = &ci;///e是一个指向整数常量的指针(对常量对象取地址是一种底层const)

还可以引用类型设置为auto,此时原来的初始化规则仍然适用:

auto &g = ci ; ///g是一个整型常量引用,绑定到ci
auto &h = 42/// 错误,不能为非常量引用绑定字面值
const auto &j = 42/// 可以为常量引用绑定字面值

切记,符号 * 和 & 只能从属于某一个声明,而非基本数据类型的一部分,因此初始值必须是同一个类型:

auto k = ci, &l = i;///k是整数,l是整型引用
auto &m = ci, *p = &ci;///m是对整型常量的引用,p是指向整型常量的指针
auto &n = i,*pp = &ci;///错误!i的类型是int,而&ci的类型是const int
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值