博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++0X 学习之 auto
阅读量:6261 次
发布时间:2019-06-22

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

auto并不是一个新关键词,是一个把旧关键词赋予新的作用,

新的作用修饰变量声明,指示编译器根据变量的初始化表达式推导变量应有的类型。
auto 声明的变量必须“在声明处完成初始化”,编译器才可根据初始化表达式推导变量的类型。
二话不说,先看看例子呗。
对于现在,我们一般通过迭代器 for 容器的时候,都会写出这样的代码

#include #include 
struct people{ int age; char sex;};typedef std::map
people_map;int _tmain(int argc, _TCHAR* argv[]){ people_map my_map; for (people_map::iterator it = my_map.begin(); it != my_map.end(); ++it) { std::cout<<"do something"<

获取容器的迭代器之前,我们要写出容器的类型,在这里用了 typedef,把类型缩短了=,=,

要是懒点的话,很可能写成 std::map<std::string, people>::iterator。我的天啊,
我仅仅想获取它的迭代器,却要写那么多代码。很多时候,我们并不需要知道容器的类型,
或者,我们已经非常清楚类型了,那么,除了用 typedef 简化,还有啥方法呢?

 

这就是 auto 关键词的新作用了,用来推倒表达式的应有类型,代码改进后是这样子了。

#include #include 
struct people{ int age; char sex;};int main(){ std::map
my_map; for (auto it= my_map.begin(); it!=my_map.end(); ++it) { std::cout<<"do something"<

在这里,把 typedef 咔嚓掉了(但是声明变量的时候麻烦了点)=,=,然后获取迭代器, 直接用 auto 了,不用管它是什么类型了。 在这里,it 自动推导成 std::map<std::string, people>::iterator 了。

auto 是不是很强大的一个关键词呢,在新的作用下,可以写出更简洁的代码。 但是 auto 也有局限性,比如上面的例子,他是推导成 std::map<std::string, people>::iterator, 不会推导成 std::map<std::string, people>::const_iterator。

 

使用 auto关键词也有注意的地方(摘自网络):

注意一:auto 不能做为模板参数。因为这违背了 auto 需要由初始化表达式来推导类型的原则。

注意二:auto 不能做为函数的参数类型和返回类型。同样是因为违背了 auto 推导类型的原则。 函数在编译时要实例化,此时便需要确定参数的类型,以方便安排内存。声明为 auto 的话如何确定其类型呢?没法确定,所以这样用是不允许的。

 

 

 

下面再让我门看看  auto  的一点代码 然后 就可以睡觉了:

#include 
#include
using namespace std;int main(){ auto a = 100; cout<
<
vec; for(int i = 0; i < 10; ++i) { vec.push_back(i); } for (auto it = vec.cbegin(); it != vec.cend(); ++it) { cout<<*it<
int{ return c+=i; }; cout<
<

好吧 同志们 每天学习一点点 洗洗睡吧!!!

 

 

 

转载于:https://www.cnblogs.com/MrGreen/p/3271678.html

你可能感兴趣的文章
SecureCRT设置背景颜色
查看>>
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
查看>>
How to update WPF browser application manifest and xbap file with ‘mage.exe’
查看>>
SQL Server T-SQL高级查询
查看>>
通过配置CPU参数 worker_cpu_affinity 提升nginx性能
查看>>
解决的方法:warning: Clock skew detected. Your build may be incomplete.
查看>>
技术型创业者easy遇到的三大问题
查看>>
无法打开SQL Server的连接
查看>>
java泛型中的对象
查看>>
进程和线程区别理解
查看>>
php创建token
查看>>
Android 系统API实现数据库的增删改查和SQLite3工具的使用
查看>>
95、Android下在onCreate中获取控件的宽度和高度(通过回调)
查看>>
UML在需求分析阶段的应用
查看>>
JavaScript:JavaScript事件的处理
查看>>
WEB安全测试的类型
查看>>
ES6笔记(7)-- Promise异步编程
查看>>
早睡早起
查看>>
C#软件监控外部程序运行状态
查看>>
几款开源的图形化Redis客户端管理软件推荐
查看>>