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

#include <map>
#include <string>
struct people
{
int age;
char sex;
}; typedef std::map<std::string,people> 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"<<std::endl;
} return ;
}

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

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

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

在这里,把 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 <iostream>
#include <vector>
using namespace std; int main()
{
auto a = ;
cout<<a<<endl; // auto b = 12.0f;
cout<<b<<endl; // auto& c = a;
c++;
cout<<a<<endl; // vector<int> vec;
for(int i = ; i < ; ++i)
{
vec.push_back(i);
}
for (auto it = vec.cbegin(); it != vec.cend(); ++it)
{
cout<<*it<<endl; // 0 1 2 3 4 5 6 7 8 9
} //lambda 表达式
auto pF = [&c](int i)->int{ return c+=i; };
cout<<pF()<<endl; // cout<<a<<endl; // return ;
}

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

C++0X 学习之 auto的更多相关文章

  1. python基础练习题(题目 学习使用auto定义变量的用法)

    day28 --------------------------------------------------------------- 实例042:变量作用域 题目 学习使用auto定义变量的用法 ...

  2. Android Auto开发之一《开始学习Auto 》

    共同学习,共同进步, 转载请注明出处.欢迎微信交流:sfssqs,申请注明"Android Car"字样 ================= =================== ...

  3. Auto Layout 使用心得

    此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考我的 Auto Layout 设置哦,下载到本地打开就可以了. 简介 Auto ...

  4. Python——Code Like a Pythonista: Idiomatic Python

    Code Like a Pythonista: Idiomatic Python 如果你有C++基础,那学习另一门语言会相对容易.因为C++即面向过程,又面向对象.它很底层,能像C一样访问机器:它也很 ...

  5. C语言 经典编程100题

    一.题目 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? =============================================== ...

  6. hosts manager——hosts配置管理工具

    引言 做web开发相关的经常会用到hosts修改的功能,各个平台好像都有hosts 配置GUI(据我所知windows有.MAC OX也有),但是命令行配置hosts的好像还没有,命令行配置的话有几个 ...

  7. C语言经典例题100

    C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...

  8. C语言100道经典算法

    经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...

  9. 算法练习26-xx

    26.左旋转字符串(字符串) 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数.要求时间对长 ...

随机推荐

  1. 在mac上独立安装PHP环境

    1.http://dditblog.com/blog_418.html 2.http://www.jianshu.com/p/0456dd3cc78b

  2. [原创]实现多层DIV叠加的js事件穿透

    Flash里面有个很好的特性是,一个容器里,不存在实际对象的部分,不会阻拦鼠标事件穿透到下一层. 前端就不一样了,两个div层叠以后,上层div会接收到所有事件(即使这个div里面内容是空的,没有任何 ...

  3. Angular关于$anchorScroll的定位滚动

    以下是实现定位滚动的代码: <!DOCTYPE html> <html lang="en" ng-app="app"> <head ...

  4. js的new到底干了啥 -

    javascript通过new操作符构建一个对象的步骤 <Javascript高级程序设计>的解释: 创建一个对象 将构造函数的作用域赋给新对象(把新对象作为构造函数的调用上下文,也就是t ...

  5. 九度OJ 1189:还是约瑟夫环 (约瑟夫环)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:820 解决:522 题目描述: 生成一个长度为21的数组,依次存入1到21: 建立一个长度为21的单向链表,将上述数组中的数字依次存入链表每 ...

  6. JAVA NIO 简介 (netty源码死磕1.1)

    [基础篇]netty 源码死磕1.1:  JAVA NIO简介 1. JAVA NIO简介 Java 中 New I/O类库 是由 Java 1.4 引进的异步 IO.由于之前老的I/O类库是阻塞I/ ...

  7. 【python】-- 基于Django的杂货铺

    Django的杂货铺 此篇文章保存基于Django而实现的各种小功能示例 1.验证码 + Session 这个是在前端图片验证码的生成,再配合Session进行后端校验的功能示例 import ran ...

  8. C++, Java和C#的编译、链接过程解析

    总是感觉java是解释性语言,转载下一篇感觉写的容易理解的文章 转自 http://www.cnblogs.com/rush/p/3155665.html 1.1.1 摘要 我们知道计算机不能直接理解 ...

  9. 如何将cordova导入Android studio,只需两步即可

    Cordova的技术交流新群 微信公众号:

  10. xcode6

    官方的xcode6下载太慢,这里送上百度网盘地址: http://pan.baidu.com/s/1hqze1hi