C++0X 学习之 auto
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的更多相关文章
- python基础练习题(题目 学习使用auto定义变量的用法)
day28 --------------------------------------------------------------- 实例042:变量作用域 题目 学习使用auto定义变量的用法 ...
- Android Auto开发之一《开始学习Auto 》
共同学习,共同进步, 转载请注明出处.欢迎微信交流:sfssqs,申请注明"Android Car"字样 ================= =================== ...
- Auto Layout 使用心得
此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考我的 Auto Layout 设置哦,下载到本地打开就可以了. 简介 Auto ...
- Python——Code Like a Pythonista: Idiomatic Python
Code Like a Pythonista: Idiomatic Python 如果你有C++基础,那学习另一门语言会相对容易.因为C++即面向过程,又面向对象.它很底层,能像C一样访问机器:它也很 ...
- C语言 经典编程100题
一.题目 [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? =============================================== ...
- hosts manager——hosts配置管理工具
引言 做web开发相关的经常会用到hosts修改的功能,各个平台好像都有hosts 配置GUI(据我所知windows有.MAC OX也有),但是命令行配置hosts的好像还没有,命令行配置的话有几个 ...
- C语言经典例题100
C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...
- C语言100道经典算法
经典的100个c算法 C语言的学习要从基础,100个经典的算法真不知道关于语言的应该发在那里,所以就在这里发了,发贴的原因有2个,第一个,这东西非常值得学习,第二个,想..........嘿嘿,大家应 ...
- 算法练习26-xx
26.左旋转字符串(字符串) 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串abcdef左旋转2位得到字符串cdefab.请实现字符串左旋转的函数.要求时间对长 ...
随机推荐
- linux 下配置jdk
去java官方地址下载相应的源码包我下载的是1.8.0放在usr/local目录下 export JAVA_HOME=/usr/local/jdk1.8.0export PATH=$JAVA_HOME ...
- 星球大战starwar(并查集)
1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 5253 Solved: 2395[Submit ...
- docker笔记一
docker概念介绍: docker 是一个装在linux上的普通的软件.利用docker的命令,可以创建一个带有linux操作系统的镜像文件,docker命令运行这个带的linux操作系的镜像文件, ...
- windowsphone8.1学习笔记之位图编程
说位图,先把image控件简单过下,Image的Source设置 <Image Name="img" Source="可以是网络图片的Uri.应用文件的Uri或者安 ...
- [Delphi]解决Delphi Distiller运行报错"HKEY_CURRENT_USER\\" is of wrong kind or size
最近终于决心将使用多年的Delphi 7升级到Delphi 2007,虽然目前Delphi最高版本已经是XE8,但对于只做VCL开发的话还是喜欢2007这个经典的版本. 安装Delphi 2007一切 ...
- cocos2dx的ui封装
cocos2dx里加载cocosudio导出的ui配置文件,在这之上封装了一下,封装核心类包括 UIManager,UILayer,UIOwner UIManager是所有ui总的管理类,代码如下: ...
- 7 Javascript:表单与验证-非空验证
表单提交前要检查数据的合法性 在要对表单里的数据进行验证的时候,能够利用getElementById()来訪问网页上不论什么一个元素 每一个表单域都有一个form对象,可被传给不论什么验证表单数据的函 ...
- bug-4——bootStrap中的table语言设置
$(document).ready(function() { $('.datatable').dataTable( { "Language" ...
- scala语法解析(解码指环)
看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.
- Spring注解式与配置文件式
http://tom-seed.iteye.com/blog/1584632 Spring注解方式bean容器管理 1.通过在配置文件中配置spring组件注入 <context:compone ...