博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ auto类型说明符
阅读量:4313 次
发布时间:2019-06-06

本文共 1421 字,大约阅读时间需要 4 分钟。

文章来源

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<
<<" "; //print 11myauto =12;cout<
<

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

  • const 限定符
    先引入一种表述:顶层 const 表示指针本身是一个常量,底层 const 表示指针所指的对象是一个常量。一般auto 会忽略掉顶层 const,同时底层const则会保留下来,例如:
int i = 0;const 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是一个整型常量引用,绑定到ciauto &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

转载于:https://www.cnblogs.com/nanfenggu/p/7900037.html

你可能感兴趣的文章
获取设备实际宽度
查看>>
Notes on <High Performance MySQL> -- Ch3: Schema Optimization and Indexing
查看>>
Kafka的安装和配置
查看>>
Alpha冲刺(10/10)
查看>>
数组Array的API2
查看>>
为什么 Redis 重启后没有正确恢复之前的内存数据
查看>>
No qualifying bean of type available问题修复
查看>>
第四周助教心得体会
查看>>
spfile
查看>>
Team Foundation Service更新:改善了导航和项目状态速查功能
查看>>
0x13 链表与邻接表
查看>>
js封装设置获取cookie
查看>>
bzoj 1002 [FJOI2007]轮状病毒 Matrix-Tree定理+递推
查看>>
C#面向对象模式设计第十四讲:Template Method 模板模式(行为型模式)
查看>>
linux后台运行命令:&和nohup
查看>>
springboot + shiro学习(配置SecurityManager,Realm)
查看>>
iOS中使用nil NULL NSNULL的区别
查看>>
Hdu1754-线段树-单点更新
查看>>
asp.net mvc 4.0的部署
查看>>
WordPress资源站点推荐
查看>>