说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

专访图书作者祁宇:C++11让程序更简洁、更现代、更强大

HTML文档下载 WORD文档下载 PDF文档下载
祁宇,资深C++技术专家,致力于C++11的应用、研究和推广。他爱好C++,爱好开源,乐于研究和分享技术,有多个开源项目。日前CSDN采访了他,请他谈谈C++的现状以及未来的发展前景。

祁宇,资深C++技术专家,致力于C++11的应用、研究和推广。金山软件WPS资深工程师,负责Android服务端开发。精通OOP、OOD、设计模式和重构,主要研究方向为架构设计和业务重构,有丰富的开发和研发管理经验。爱好C++,爱好开源,乐于研究和分享技术,有多个开源项目(详见 GitHub),在《程序员》上发表多篇技术文章。2013年被评为珠海市优秀青年人才。

日前CSDN采访了祁宇,请他解读C++11的新标准、C++的现状以及未来的发展前景。 


祁 宇

CSDN:怎么会想到编写《深入应用C++11:代码优化与工程级应用》这本书的?有没有什么故事可以分享下?

祁宇:我作为比较早使用C++11的开发者,在项目中应用C++11的时候,可以查阅的资料还很有限,主要是通过ISO标准(ISO/IEC 14882:2011),维基百科、MSDN和http://en.cppreference.com/w/等网站来学习C++11。然而,这些地方对新特性的介绍比较零散,虽然知道这些新特性的基本用法,但有时候不知道为什么需要这个新特性,在实际项目中该如何应用,或者说最佳实践是什么,这些东西网上可没有,也没有人告诉你,因为当时只有很少的人在尝试用C++11,这些都需要自己不断的去实践、去琢磨,当时多么希望能有一些指导C++11实践的资料啊。在不断实践的过程中,我对C++11的认识加深了,C++11不断地给人带来惊喜,在我窥探到C++11的妙处之后,我很想和更多人的分享,让更多的人更好地掌握C++11的用法和领略C++11的魅力。这是我把应用C++11的一些心得和经验放到我的技术博客上分享出来的初衷,也是我写作此书的初衷。

CSDN:这本书适合哪些读者?书中主要介绍了哪些内容?设计思路是怎样的?

祁宇:适合普通的C++开发者,无论是新手还是老手,都有必要学习和应用C++11,C++11的强大特性可以大幅提高生产力,让我们的项目开发更加得心应手。

本书分为两部分,前半部分侧重从如何去改进我们现有程序的角度去介绍C++11新特性 。这样一来可以让读者学习这些新特性的用法;二来还可以让读者知道这些特性是如何改进现有程序的,从而能更深刻的领悟C+11的新特性;后半部分通过丰富的开发案例来介绍如何使用C++11去开发项目,相信这些实战案例能给读者带来更深入的思考。

CSDN:代码优化的好处有很多,但并不意味着所有的代码都需要进行优化,有时过度的优化反而适得其反,对此,你怎么理解?在实践过程中,你是怎么操作的?

祁宇:确实,代码的过度优化可能会让代码变得更加晦涩,这是应该尽量避免的,另外过早的优化也是不提倡的。事实上,在实际的项目开发过程中,代码优化不是做多了而是做得太少了,很多情况下都是赶进度,赶任务,或者由于自己的水平有限,主观能动性不足,很少会有人花大量时间去考虑代码优化的事,更不会主动通过应用新技术或采用重构等手段去改进代码。

在项目开发中我会采用一些最佳实践来保证写代码不容易犯错,比如我不用裸指针,只用智能指针和guard手法,这样我根本不用担心内存泄漏的问题,通过type_traits在编译期做一些约束确保我们在编译期就能及早地发现问题。项目开发到一定时候我会用一些第三方工具来审查代码,比如Source moniter和Simian,看看我的代码有没有重复代码,有没有深层嵌套,圈复杂度是不是太高等等,然后重构。做这些事情虽然看起来可能会拖慢开发进度,甚至对你的KPI没有任何帮助,但它对你的项目质量却有很大帮助,也许在项目交付后别人忙着改Bug,而你却可以悠闲地喝咖啡了。

CSDN:你怎么看C++新标准?有没有哪些新特性让你印象深刻?它会影响API的设计吗?现存的库如何保持更新呢?

祁宇:C++新标准意味着更强的生产力,让C++更加强大,让你写C++更爽。据说重要的话要说三遍,这句话请重复三遍。

C++新标准有很多特性让人印象深刻,比如,右值引用可以避免无谓的拷贝,提高程序性能;可变模板参数使C++的泛型编程的能力更加强大; type_traits可以使我们方便地在编译期对类型进行计算;智能指针使我们不用担心内存泄露的问题了;线程库让我们能方便地编写可移植的并发程序;auto+decltype不仅让我们写代码更加简洁还让推断模板函数的返回类型更加便利,lambda让算法更清晰等等,不一而足。难怪Bjarne Stroustrup说C++11看起来像一门新的语言了,相信学习和使用过C++11的朋友一定心有戚戚焉。

新标准会让API变得更合理——API的设计会向着更加简洁、清晰、减少语法和语义噪音的方向上演进。当然,更主要的还是取决于使用这些特性的用户。

现存的库升级到新标准的代价是非常小的,希望广大C++开发者及时升级编译器,在新项目中使用新标准,你们失去的仅仅是一个老旧的编译器,而得到的却是巨大的生产力!

CSDN:C++的应用领域变得越来越小,你认为C++的演进方向是什么样的? C++的强势领域在哪里?它未来会有什么样的发展?

祁宇:随着Web和移动的崛起,C++的应用领域相对来说变小了,当一个领域下出现了一门专门的语言能够实现更加简洁的封装,又很容易上手,并且也不再那么需要强调效率的时候,C++被取代是很正常的。事实上,C++是一个通用的语言,它在尽量保证高效的前提下,来实现足够优雅的抽象概念的封装。所以同样的,我们可以看到在前台花样迭出的情况下,后台使用C++来做关键的性能部分是很自然的选择。对于核心的算法,使用C++可以实现一次编码多处编译,从而在任何平台下都有最佳的性能,而上层部分则可根据实际情况及平台选择专门的语言来高效的撰写。另外,在服务器、安全、游戏、嵌入式等领域里,C++依然是不二的选择,随着新标准的出现,现代C++将出现在更多的领域。

虽然C++11相比C++98/03来说已经有了脱胎换骨的变化,但C++仍然在持续发展,充满活力,比如已经出来的C++14和即将到来的C++17,C++17将引入concept、文件库、并行库、网络库和coroutine,这些是非常值得期待的,可以预见的未来,C++的发展会越来越好。随着C++新标准的不断发展,引入越来越多的现代编程语言的特性,C++将越来越受欢迎,C++11的出现已经印证了这一点,在StackOverflow的最近一次调查中,C++11在所有的编程语言中排名第二,这是毫不意外的。

CSDN:Go语言的语法与C++相似,国内外的推崇者也比较多,你认为未来它会取代C/C+吗?

祁宇:二者有一定的相似度,从语法上来说,Go就像一个被重度语法糖包裹的C++,还去掉了编译期/预编译期计算的能力。对于我个人而言,C++的模板和模版元很有趣,也是我喜爱C++的一个重要原因,对于没有模板和模版元的编程语言无疑少了很多乐趣。

我认为未来Go不会取代C/C++,因为它们的应用范围并不相同。Go语言的一些不足也影响了Go的推广,例如,不能忽略import的错误,一些关键实现(如GC)改进迟缓导致生产的软件的缺陷等等。 Go语言相比C/C++可能更擅长并发与分布式(这一点将在即将到来的新标准C++17中得到弥补,实际上C++11已经具备这方面的基础了),而C/C++则更为严谨、朴实和通用,对于C++来说,可以在保证更高效率的同时实现比Go更丰富和简洁的抽象。只要想做,C++完全可以实现Go里的大部分关键字(比如go/defer/switch)。

其实无论什么语言,只要你喜欢并享受它带来的乐趣就够了,与其加入满是口水的语言之争不如为喜欢的语言的发展做一点实际的事情。

CSDN: 除了C++,你还喜欢什么语言?在日常工作中你常用的工具有哪些?

祁宇:我还喜欢C#语言,常用开发工具是VS2013、VIM、Eclipse,intelij;UML设计工具是EA;代码检查的工具是source moniter和simian。

CSDN:你开源了多个项目,这些项目还会经常维护吗?你设计的初衷是什么?你怎么看待开源社区的演进?

祁宇:现在还在维护,而且还在不断增加新的项目,并且有越来越多的人参与进来。

在用C#和Java开发了一些项目之后再回到C++时,不免感慨C++相比C#和Java来说少了很多有用的库,比如AOP、IOC、ORM、steam API等等,所以我希望我能做点事,让C++的世界变得更美好,让C++开发者的日子变得更美好,尤其是这么给力的C++11出来之后,这种愿望就更强烈了,这是我将我工作中开发的一些基础库开源出来的初衷,也是我投入开源社区的动力。

我理解的开源社区是没有功利性的,靠的是一大批编程爱好者对编程的热爱,靠的是一点梦想。除了这些之外,开源社区的发展应该切合现实实际需求,让更多的人愿意参与进来。现在对于C++社区而言是一个黄金时代,因为新标准的不断发展,以前的一些难做之事用现代C++去做都变得很简单,用现代C++去做前人未做之事,弥补以往C++世界的缺憾正当其时。我创建的C++社区(purecpp.org)正是在这个背景下诞生的,社区里不仅有高质量的原创技术文章,还有线下技术沙龙(最近组织了一次主题为C++魔法的技术沙龙,详细信息在这里:http://purecpp.org/?p=202),还有活跃的开源项目,在这里透露一下我们现在正在做的一件有趣的事情,是我们社区的一个开源项目,用现代C++做一个灵感来源于sinatra的现代Web Framework,我们的社区后面升级会采用这个框架,社区网站也将用现代C++开发,敬请关注。

CSDN:给C++爱好者分享些经验和心得感悟。

祁宇:兴趣是最好的老师,享受现代C++带来的乐趣会让你学习C++变得更容易。任何书或资料都只能让你入门,最重要的是实践。在你享受你喜爱的编程语言的时候,心怀感恩,业余之时为这个语言的发展做一点事,生活将会增加更多乐趣。

  • 查看试读样章:《深入应用C++11:代码优化与工程级应用》
  • 向祁宇老师提问,移步社区问答http://bbs.csdn.net/topics/391058121


CSDN现开启图书作者专访栏目,欢迎推荐采访人或自荐,来分享你的成长经历和相关技术,相关信息请发送邮件至:xiamz#csdn.net(#换成@)。更多精彩内容,请点击社区之星或搜索关键字 图书作者查看。
【最具价值CTO评选秀】极路由CTO康晓宁:极客转型CTO的感悟 盘点这些年来的“微信万能论” 《近匠》亲加通讯云:IM即时通讯API的极致服务者 TCL杯HTML5智能电视开发大赛完美落幕,8项获奖应用大揭晓! Xcode 6.2 Beta发布,支持WatchKit的iOS 8.2 SDK来了! 【最具价值CTO评选秀】携程高级技术副总裁叶亚明:从呼叫中心到移动互联网的演进 为什么靠谱的公司都应该参加CTO评选? 【深度剖析】微软开源.NET:战略重心已从PC转移到云端 专访POWER 8编程挑战赛选手黄文超:非科生的编程算法之路 BDTC 2014干货精彩不断,四大全天技术论坛议题全面曝光 全功能API!开源2D游戏引擎Firmament 微信公众平台新增“微信连Wi-Fi”功能,打通线上线下闭环 马化腾:微信在一线城市活跃 QQ增长从城市到农村 承包MIPS开发!Imagination发布双Codescape MIPS SDK 不任性了!Google Play宣布开通国内开发者通道 脑洞大开!用Swift写个Material Design组件库 美国最大婚恋网站eHarmony利用Hadoop、OpenStack重构自己 每个Java开发者都应该知道的5个JDK工具 异构计算应用研讨暨OpenCL编程培训在上海和西安成功举行! APIs.io:用来发布和发现API的利器 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站 直接拿来用!十大Material Design开源项目 初探WatchKit,开发者必须知道的6件事! 【MDCC专访】环信CEO刘俊彦:音视频即时通讯将成为技术壁垒 第十七届全国工程建设计算机应用大会在京召开,AMD受邀详解GPU Computing! 哪一门开发语言薪水最高? 借助ArangoDB,带你玩转Google图算法引擎Pregel 【最具价值CTO评选秀】MediaV CTO胡宁:技术女神的自我奋斗 豌豆荚邓草原:如何实现实时响应式平台 必须谨记!Node.js安全开发技巧 聚焦新平台新应用 IBM 2014技术峰会上海站顺利落幕 处理字符串以修改数据库 开机显示the secondry IDE channel no 80 cable …… <input type=file name=pic>如何取值,如何设置初始值???? 么样判断一个客户机是否能够连上服务器上数据库,在线等待 在RAVE中如何加上总页数和当前页数? 有缺邮箱用的吗>?现在有了哦,穷人快来啊。。哈哈,我也是其中一个。 请问一个 应用程序登陆SQl Server 时密码的问题? 菜鸟提问! Outlook Express邮件丢失 非典嚣张的日子里的北京(希望惊起大家对SARS的关注)!!! 问一个简单的概念性问题,分却很多.......还可加哦 一个数据映射错误 关于进程通讯的问题 问一个简单的概念性问题,分却很多.......还可加哦 哪里可以找到关于OA方面的资料?越多越好,100分送上 高手请进,怎么监测到一个文件将被覆盖 请问如何屏蔽F1查看帮助的功能? 高手请进,怎么监测到一个文件将被覆盖 能提供解码器么? 在tdi中,怎样获取封包ip头? 神啊!救救我吧!!!!(在线等待) 我看SARS危机 求助 我该怎么办??? 管理登陆问题解决?? 一个简单的问题,如何对字符串进行减操作? 谁用过struts,进来交流一下! 请大侠看看俺的小程序,哪里错了(关于不规则图形填充) delphi查询问题(急需) 急求:从硬盘安装windowsxp时电脑出显不能安装,找不到eula!如何解决? 系统分析员VS博士 C#连接Oracle? 关于<BASE> 那里有WebDB下载啊. 在ListCtrl里加类似Combo Box的东西,能实现吗? windows2000下vb的一个小问题~~ 如何把当前路径加入查找路径中?立即给分! 对选用不同的纸张大小,在预览中能看出效果吗? 请问怎么在PB6.0中实现Foxpro(*.dbf)的数据导入,到ASA库中 j2me里怎么才能实现图象的滤镜效果?waiting... CDbSet m_dbSet(NULL)在哪一步才能得到一个CDatabase对象的错针? 新手提问:“镜象”是什么意思 求教,如何配置使性能达到最佳,详情见文 怎样在广域网中提高传屏响应速度?帮帮忙!急啊. 在文件钩子当中如何判断是打开文件操作,还是创建文件操作 怎样在applet程序中显示一幅jpeg图片?该图片存在于c:\image\下。 去年12月是谁发的帖子“做项目经理难么” 关于图层拖拽的问题 我有一块硬盘,迈托4.3G,开格式化分时说错误设备或0磁道损坏,后来fdisk分区,启动无效 这是个什么错误啊~ 第一次做控件不明白 给点指点啊 急求:从硬盘安装windowsxp时电脑出显不能安装,找不到eula!如何解决? "截距相等"用看符号吗 contract什么意思 小学生遵守交通规则的事例!要遵守交通规则的,快,要身边发生的,描写要详细,多 两直线平行是截距相等么 胡椒粉加水进入眼睛会怎样 秋千这词是哪来的? 氧化性Al3+>Mg2+>Na+,则元素金属性顺序? 如何检验正庚烷溶剂是否合格我们用正庚烷做去渍溶剂 "秋千"这个词是怎么来的? 1摩尔C17H18最多与几摩尔氢气发生反应 正庚烷在70摄氏度的密度,比热容,粘度,导热率 不遵守交通规则的事例,要具体,急! 这个物质最多能和几摩尔氢气发生反应?生成什么?为什么? 电子分析天平可以检测什么项目? 地下水污染问题《时寒冰说》一书在某章节说明,地下水污染的治理费用非常巨大,全球恐怕没有哪个国家可以承担的起.日本曾经估测过,如果要全面治理日本地下水,将会耗资“多少”万亿美 招远金矿事故我最大的难题就是看不到你,得不到你的消息我烦的不行 第二个问是什么意思,截距表示什么. 云母屏风烛影深指的是什么时间 如何证明π是圆周率? 二次函数的截距是什么意思?怎么算还有公式啥的,求详细解释!谢谢! 云母屏风烛影深,长河渐落晓星沉.的意思是什么? 在图书馆前站着的那些人是谁?Who are the persons ____ ____ standing in front of the library? 云母屏风烛影深的意思是什么? 苗苗按比例描摹油画(秋千)已知原画长83cm,宽66cm,她画的画长是16.6cm,她选用的比例尺是多少请例出算式 accord,pact,treaty,compact的用法与区别如题,不要到网上copy别人写的那些没有用东西.如果有用我也就不发贴了.下面我再发一下此4个同意词各自的英文注解,都出至Longman当代词典第5版.accord---a formal ‘云母屏风烛影深,长河渐落晓星沉.的意思是什么 大豆异黄酮是从黄豆还是蚕豆中提取的?含雌激素较多的食物有哪些? 想做离子色谱 不知道样品怎么处理 能做吗 什么能够快速产生大量二氧化碳或者能大量消耗氧气?或者说,能起到灭火作用?最好是材料低价,反应迅速,效果明显的,试验成功后可再增加赏金~ 用钡餐检查出胃里面有一个阴影是怎么回事 有人用上海精科的万分之一电子分析天平么?效果怎么样我先买了一个沈阳龙腾的,计监局来检了一次不合格,换了一台,还是不合格,10g的砝码称出来9.9983g.计监局的说需要重新选个品牌,谢谢( 什么东西能与吗柠檬酸生成大量的CO2要经济点的写出公式 秋千如何画,请发铅笔稿. 听人讲.中药也会有重金属成份? C6H4CNSCH3用重铬酸钾氧化产物是什么?CN和SCH3在苯环上是相邻的能把CN氧化成氨氮吗? 固相萃取和液相色谱的关系固相萃取跟液相色谱有什么关系?固相萃取重点是什么啊,在什么方面重要点?想买一台仪器该考虑哪些呢? 降解中药材重金属含量的方法 云母屏风烛影深,长河渐落晓星沉的意思简单一点,越简单越好,不要太简单加上:云母屏风烛影深,深的意思,长河渐落晓星沉,长河的意思和沉的意思 国内哪家的色谱四氢呋喃质量好? 品种 莲的美食和药用 莲的名胜古迹 莲的诗文、故事、传说 I have to assume beyond any doubts that. ..这个that引导的是宾语从句还是同位语从句 为什么. 有么有描写人物的故事?可以是自己人也可以是陌生人 云母屏风烛影深,长河渐落晓星沉.的意思要句意,不要故事要这两句的句意,别的什么都不要 云母屏风烛影深 长河渐落晓星沉的意思.(短句) 李阳在家中吃饭时对厨房里的一瓶醋产生了兴趣,他很想知道醋的密度,于是找到了如下器材:小铁块(密度已知为ρ铁)、细线、弹簧测力计和一只足够深的水杯,他利用学过的知识,测出了醋 云母屏风烛影深 长河渐落晓星沉是什么意思 看例子填空百合是( )的( )与( )的( );玫瑰是( )的( )与( )的( );康乃馨是( )的( )与( )的( );向日葵是( )的( )与( 云母特性有哪些? 什么是水体富氧 怎样将分析天平调整到水平 云母的特点有哪些? assume位于句子开头,引导that从句时,用什么形式 请同学们读例子填空. 人大代表建议的写作格式 试证曲面√x+√y+√z=√a(a>0)上任何点处的切平面在各坐标轴上的截距之和等于a 沙眼衣原体DNA-CT-DNA 3.这是感染还是没感染呢? H3AlO3,CH3COOH,C6H5OH,H2CO3,HCO3-酸性排列顺序,还有其水溶液的盐碱性排列顺序.什么什么盐类水解啦之类的,总是记不住.求大神简便的记忆方法,求理解. 过点(0,3),且在两坐标轴上截距之和等于5的直线方程是? 秋千一词由何得来?来自哪里,哪个朝代?为什么而得名? 浙江金华建首个流浪狗临时收容站 市民三中全会多出重大决策 尤以经济改革决中纪委:提高纪检监察干部培训师资教学奥巴马极力摆脱“监听门” 美国安局恐报社原副总杀妻案二审开庭 羁押6年一美国家安全局否认收集欧洲电话记录 称男女离婚将4岁儿子扔幼儿园 母亲称事浙商大会吹响转型集结号 青田侨商抱团宁国回应领导视察悬浮照:照片PS 确梁振英呼吁给人质事件死者家属和伤者多香港八商会联合声明 “占中”会破坏营山西乡村教师最后的坚守:全校仅剩7名宣布参选台北市长 吕秀莲扬言:我有必王金平:“中选会”复议案拟11月5日美主持人就\"杀光中国人\"言论道歉国民党“全代会”将召开 马英九:安全浙江省千家污水处理厂年底前实行刷卡排部分院校年年开学菜价要涨 学生期待\“清风”生活用纸全国巡展登陆上海杭州天气转凉进入“栗子季” 排队买迁中央军委自上而下派出巡视组 主要监督“美丽天使”:留得明眸在人间公告启事九龙派出所来了一群“小客人”新业态 新文态 新形态 新生态吴江启动网络文化节创业板指数十天飙涨七百点南京中生联合股份有限公司上市辅导公告“地下四合院” 走进陕县地坑院南京出租车燃油费 明起涨至2元护考“禁噪”,期待突击变长效花钱绕过限购令被判无效朴槿惠提名新总理候选人承认智商差距更利因材施教“江南织造”走向国际舞台申鑫将送死忠球迷球衣+奖牌:最忠实第北京亚运吉祥物熊猫盼盼迎“百岁大寿”美飞行器第四次神秘入太空外来务工家庭终圆住房梦点 题遗失声阴跪拜“大师”, 只因官员迷失信念
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘