C++11 中值得关注的几大变化(详解)

标签: C/C++语言 编程语言 C++ C++ 11 C++0X | 发表时间:2011-08-19 08:43 | 作者:陈皓 michael
出处:http://coolshell.cn
源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这些变化”的一个探讨,只有知道为了什么,用在什么地方,我们才能真正学到这个知识。而以此你可以更深入地了解这些变化。所以,本文不是翻译。因为写得有些仓促,所以难免有问题,还请大家指正。 Lambda 表达式 Lambda表达式来源于函数式编程,说白就了就是在使用的地方定义函数,有的语言叫“闭包”,如果 lambda 函数没有传回值(例如 void ),其回返类型可被完全忽略。 定义在与 lambda 函数相同作用域的变量参考也可以被使用。这种的变量集合一般被称作 closure(闭包)。我在这里就不再讲这个事了。表达式的简单语法如下, 原文的作者给出了下面的例子: 在传统的STL中for_each() 这个玩意最后那个参数需要一个“函数对象”,所谓函数对象,其实是一个class,这个class重载了operator(),于是这个对象可以像函数的式样的使用。实现一个函数对象并不容易,需要使用template,比如下面这个例子就是函数对象的简单例子(实际的实现远比这个复杂): 所以,C++引入Lambda的最主要原因就是1)可以定义匿名函数,2)编译器会把其转成函数对象。相信你会和我一样,会疑问为什么以前STL中的ptr_fun()这个函数对象不能用?(ptr_fun()就是把一个自然函数转成函数对象的)。原因是,ptr_fun() 的局限是其接收的自然函数只能有1或2个参数。 那么,除了方便外,为什么一定要使用Lambda呢?它比传统的函数或是函数对象有什么好处呢?我个人所理解的是,这种函数之年以叫“闭包”,就是因为其限制了别人的访问,更私有。也可以认为他是一次性的方法。Lambda表达式应该是简洁的,极私有的,为了更易的代码和更方便的编程。 自动类型推导 auto 在这一节中,原文主要介绍了两个关键字 auto 和 deltype,示例如下: auto 最大的好处就是让代码简洁,尤其是那些模板类的声明,比如:STL中的容器的迭代子类型。 可以变成: 模板这个特性让C++的代码变得很难读,不信你可以看看STL的源码,那是一个乱啊。使用auto必需一个初始化值,编译器可以通过这个初始化值推导出类型。因为auto是来简化模板类引入的代码难读的问题,如上面的示例,iteration这种类型就最适合用auto的,但是,我们不应该把其滥用。 比如下面的代码的可读性就降低了。因为,我不知道ProcessData返回什么?int? bool? 还是对象?或是别的什么?这让你后面的程序不知道怎么做。 但是下面的程序就没有问题,因为pObject的型别在后面的new中有了。 自动化推导 decltype 关于 decltype 是一个操作符,其可以评估括号内表达式的类型,其规则如下: 如果表达式e是一个变量,那么就是这个变量的类型。 如果表达式e是一个函数,那么就是这个函数返回值的类型。 如果不符合1和2,如果e是左值,类型为T,那么decltype(e)是T&;如果是右值,则是T。 原文给出的示例如下,我们可以看到,这个让的确我们的定义变量省了很多事。 还有一个适合的用法是用来typedef函数指针,也会省很多事。比如: auto 和 decltype 的差别和关系 Wikipedia 上是这么说的(关于decltype的规则见上) 如果auto [...]

相关 [值得 变化] 推荐:

C++11 中值得关注的几大变化(详解)

- michael - 酷壳 - CoolShell.cn
源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里. 所以,我就不翻译了,我在这里仅对文中提到的这些变化“追问为什么要引入这些变化”的一个探讨,只有知道为了什么,用在什么地方,我们才能真正学到这个知识.

Go 1.4中值得关注的几个变化

- - Tony Bai
在Go 1.3发布半年过去后, Go核心项目组于本月初发布了 Go 1.4 Beta1版本. 这个版本的几个变化点虽然不是革命性的,但对后续Go语言的发展来说,打下了基础,定下了基调. 这里就几个值得关注的变化点结合Go 1.4代码进行一些简单描述,希望大家能对Go 1.4有个感性的认知和了解.

2012年值得移动开发者关注的变化及趋势

- - ITeye资讯频道
每年都会有不同的人对于下一年某个产业的发展趋势做出预测,关注移动互联网多年,同时在这个行业里也做了一些事情,结合最近的一些思考,本文简单谈一下我对2012年移动互联网在中国发展趋势的一点看法. 每当有人做下一年预测的时候,通常会列出10个趋势,我觉得没必要凑数,从我目前的理解来看,只能看到5个方面,简单和大家交流一下.

值得使用的Spring Boot

- - ImportNew
2013年12月12日,Spring发布了4.0版本. 这个本来只是作为Java平台上的控制反转容器的库,经过将近10年的发展已经成为了一个巨无霸产品. 不过其依靠良好的分层设计,每个功能模块都能保持较好的独立性,是Java平台不可多得的好用的开源应用程序框架. Spring的4.0版本可以说是一个重大的更新,其全面支持Java8,并且对Groovy语言也有良好的支持.

有什么书值得买?

- - 知乎热榜
今年看完了50本左右,每种类型选一两本我最喜欢的书推荐给大家,个人觉得这些书都是值得入手纸质书的. 《叫魂》是著名汉学家孔飞力先生的著作,这本书非常畅销,也是微观史学的代表作. 本书所讲述的是一个关于“盛世妖术”的故事. 在中国的千年帝制时代,乾隆皇帝可谓是空前绝后的一人,他发展并巩固起来的大清帝国达到了权力与威望的顶端.

115本值得一读再读的书,值得收藏!

- - 冷知识·爱生活
你在阅读上花的每一秒,都会沉淀成更好的你. 12类,115本值得一读再读的好书. 20年来迪士尼动画和对手们的成绩对比. 经典台词:我的爱,不会让我成为永远的孤魂. 十分钟读完春秋史:假如中原是一个村.

TCP 状态变化

- - 互联网 - ITeye博客
关闭socket分为主动关闭(Active closure)和被动关闭(Passive closure)两种情况. 前者是指有本地主机主动发起的关闭;而后者则是指本地主机检测到远程主机发起关闭之后,作出回应,从而关闭整个连接. 将关闭部分的状态转移摘出来,就得到了下图:. 通过图上,我们来分析,什么情况下,连接处于CLOSE_WAIT状态呢.

为什么Google+值得你花时间

- psyZETA - 所有文章 - UCD大社区
缓慢重建如Google社交网络般庞大的东西绝对是令人蛋疼的. 我向挤满收件箱的高中时代的各种朋友都提出了邀请. 而我打开的每一个Google网页:Gmail, Calender和Google Search在右上角都会弹出一些小提示,指引我去看看Google+的情况. 我的意志力从来没有这样被折腾得精疲力竭.

值得一去的水上酒店

- zx - 译言-每日精品译文推荐
来源CNNcojp:一度は行きたい世界の水上ホテル - (1/10).  在水上漂浮的酒店中,享受奢侈的假日——. 船坞、小船,还有建筑在竹筏上的小别墅、高床式小木屋,CNN甄选了世界各地的5家水上旅馆为您介绍. 巴拿马的Punta Caracol aqua小木屋,面向生态旅行者. 用太阳能发电,仅能保证每个房间一盏12伏特电灯泡的用电,不过也无需挑剔了.

值得推荐的经典电影

- Patrick - 有意思吧
1、缺乏学习动力:《幸福终点站》、《风雨哈佛路》. 2、对爱失望:《偷天情缘》、《初恋50次》. 3、自卑失落:《阿甘正传》、《肖申克的救赎》. 4、失败或绝望:《铁权男人》、《迫在眉梢》、《伊丽莎白镇》. 5、厌倦生活:《在世界的转角遇见爱》、《搏击俱乐部》. 《盗梦空间》、《记忆裂痕》、《生死停留》、《死亡幻觉》、《禁闭岛》、《穆赫兰道》、《蝴蝶效应》、《恐怖游轮》、《伤城》、《盗走达芬奇》、《88分钟》、《万能钥匙》、《决胜21点》、《沉默的羔羊》.