您的位置:首页 > 编程语言 > C语言/C++

c++11的使用心得(一)

2015-11-10 21:34 330 查看
c++11标准已经推行很多年了,然后在这几年里,由于所在的项目都没有使用该标准, 因此久久未能接触。近来,由于另外一个项目需要赶进度,被领导临时调动到该项目进行协助开发,因此也算是初次接触了c++11标准。现在就我个人关于c++11的使用心得稍作一点简单的总结。

1. c++11对于指针的空指针常量使用nullptr关键字,该关键字在使用时和NULL宏等价,但略有不同。对于NULL宏而言,在c++98的定义中,实际就是一个整常数0,因此在c++98标准中,NULL和0可以互相转化。但c++标准中,nullptr则不能转化为整数0,整数0也不能转化为nullptr。

2. c++11中可以使用auto关键字声明变量,至于变量的真正类型则根据变量赋值时的右值来推导。该关键字的好处避免了在c++98中的过长的类型声明,比如std::map<int, name> id_name_map; std::map<int, string>::iterator it = id_name_map.begin(); 这种代码可以直接被替换成 std::map<int, string> id_name_map; auto
it = id_name_map.begin(); 从代码的编写上c++11更加的简单方便,还不怕在上下声明的时候造成类型不匹配的问题。

3. 对于循环,c++提供了两种很便利的访问for和foreach,for和foreach和其他的高级语言的遍历使用方法类似。对于for(x:range)的声明方式,x的作用域只局限于for循环中,因此对于在循环结束后可能还使用到之前的遍历变量的使用,还是和之前使用方法。对于foreach则按照foreach(begin, end, (*func))这种处理方式的调用。

4. 对于lambda表达式,很多人可能很纳闷,lambda引入究竟有什么用呢?c++中不是有函数指针吗?对于此,我个人的理解就是lambda解决了对象的关联性,并且从lambda的引入,减少了函数指针的很多参数。也不需要再专门为了一个简单的功能编写一个很复杂的函数指针定义。对于lambda中,有四种声明:

[](形参列表)->返回类型{函数体};
//不引入任何参数,->返回类型可以不声明

[=](形参列表)->返回类型{函数体};
//当前函数内的变量均以值方式传递给lambda中,->返回类型可以不声明

[&](形参列表)->返回类型{函数体};
//当前函数内的变量均以引用方式传递给lambda中,->返回类型可以不声明

[this](形参列表)->返回类型{函数体};
//将当前的对象this指针传递给lambda中,->返回类型可以不声明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: