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

专访图书作者祁宇: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(#换成@)。更多精彩内容,请点击社区之星或搜索关键字 图书作者查看。
VB中将数据转换为数据库文件 VB中远程数据库的访问 Visual Basic 的数据库编程 Visual Basic数据库数据的选项录入及选项增减与编辑 把资料输往Excel来列印-VB资料 报表中的滚动问题-VB资料 编写Connect Strings-VB资料 表或查询是否存在-VB资料 不创建DSN直接在程序中使用ODBC数据源-VB资料 不用 DATA 控件操作数据库文件 -VB资料 不用 EOF 以加快记录循环-VB资料 处理Select语句中的单引号 -VB资料 断开所有的数据连接 -VB资料 访问VB外来数据库 非access数据库在vb中的编程及应用 关闭程序中所有创建的数据库连接。 -VB资料 关闭所有的数据连接 -VB资料 关于数据报表的打印设置-VB资料 VB建立、改变及重构Access数据库-VB资料 结构化查询语言(SQL)详解之一-VB资料 利用VB使ACCESS数据库在网络使用中保持同步 返回 连接Data到多个表单-VB资料 列出 SQL Server 数据库中所有的存储过程-VB资料 列出MDB档当中所有table的名称-VB资料 您想知道有谁正在使用您的 Access 文件吗?(多人环境中)-VB资料 主题:浅谈Excel 的VB编程 巧用VB6的DataGrid实现通用电子表格 VB取得正确的 RecordCount 值 主題:如何动态新增、移除 ODBC DSN? -VB资料 VB如何将表中的数据导出到电子表格中 VB如何将文本文件转换为ACCESS数据库 如何将DataGrid1中的数据打印出来, 如何使程序自动修改CEdit中的文字? 请问在.NET类库中有这样的类吗? 如何知道某个表格被锁 求助capboy等网络视频播放高手!!! 菜鸟问题:在VC中用ALTER TABLE指令需要什么头文件? 请高手帮忙,感觉难度很高 大家做GUI时有什么好用又免费的日期控件呢? 在javabean中用sql server2000的jdbc驱动连不起数据库! 添加图片到数据库中,奇怪现象! 如果我已经得到了一个DOM树, 我第一次运行HTML HELP时,new怎么会是无效的? 我的 程序在调用FORM.ACTION的用法不正确。能告诉我怎样用它 怎幺样实现一对主从表的数据库基本操作?用ADOQuery连接SQL2000. 有关统计打印的问题 一个关于用VB调用C++builder编写的DLL文件,DLL的API函数中存在函数指针。请各位高手给点意见! 大专生如何考研?(up有分) ★★ 为高兴而送分 ★★ 关于打印的问题,请各位帮忙 请问应该用何种信用卡 利用INTERNET远程连接问题 移动办公相关问题?如在两台机器里编写同一段Web程序。 怎样将oracle sql中的in语句改为exists语句? 求教win 2000双网卡上宽带的问题,请高手帮忙! win2000,给文件改日期的命令是什莫??? 为什么我的背景图片显示不出来? 请问如何在DAO的SELECT语句中使用COUNT等运算符? 请教:请问在程序中怎么在Check box 前边的小框上打上对号 老板让我一个月内学会vb,大家说可能吗? 我装了project 2000后,原来的office 2000只能用50次了,怎么回事? 请能提供DES和RSA算法的源程序呀,vb或VC的都行,最好是VB 请问如何让一个报表的内容同一个DBGrid一致,可以自由设置字段的是否显示? 我用vb新建了一个文件请问如何能双击就能打开我的程序,就跟word一样例:我新建一个kk.doc 只要双击kk.doc 就能打开word 使用Enumwindows的问题 我的jsp页面能够运行但是WEBLOGIC显示了<2002-9-2 上午10时41分13秒> <Error> <HTTP> <Connection failure 大家是怎么看下载来的MFC的程序原代码的? 在JAVASCRIPT中,我怎样用语句控制一组选钮中那一个被选中? 如何对 redhat-config-network 进行配制? 各位师兄:哪里可以下载讲Delphi6多层结构的教材?很急!!!! 小问题 看完了钱能的《C++程序设计教程》继续深入下去该找什么书来看看呢? 关闭窗口 除了onunload 是否还有其他事件? 为什么我的电脑每个目录下都有一个folder文件? 请教一下:delphi6中nmftp的用法 急!!!水晶报表问题 用代码把数据窗口指定到某一打印机打印? 如何配置jConnect连接Sybase数据库?需要安装jdk吗? 奇怪的出错:java.lang.NoClassDefFoundError: com/sun/java/util/collections/HashMap 我装了project 2000后,原来的office 2000只能用50次了,怎么回事? 各位有没考虑过买房一事,看看北京的房价再看看我的收入,怎么办??? EDITBOX和URl字符串 一个圆锥形沙漏,它的底面周长12.56米高1.8米,用这样沙子在8米宽的公路上铺3厘米后的路面,能铺多少米? 90度直径595毫米,焊接弯头展开图 蒸馏设备的原理?里面要加多少水?要蒸到什么时候?多长时间么时候?酿酒 液体其中都有水吗?是不是所有的液体中.都含有水? 平均年龄69.9±19.如何计算?公式是怎样的? 求助一下大家奥数题大全就告诉我吧本人先在此谢谢各位4Z 水是( )( )( )的液体. 9 13 9 19 19 25 15 21什么意思 六年级数学题大全 水是一种怎么样的液体 2.1.15,26.9:23.15,1.9,14.19,15!请速度点帮半忙给我翻译下. 最好多一点 我想复习 想知道工艺品一般用什么材料制作才不会腐蚀? 毛泽东写的《菩萨蛮·大柏地》中的“彩练”、“苍”、“急”和“装点”分别是什么意思? 麻烦大家看下奥数题大全n有点急, 离心风机型号为9-19-7.3各数字代表什么,急盼回复 普萨蛮,大柏地里的彩练是什么意思? 送沙漏代表什么!我是男生,有一个男性朋友要过生日,我想送他一个沙漏.但不知道该送什么颜色的? 怎么计算阴极保护的保护距离 彩练的意思是什么 绿色沙漏代表什么意思? 用什么化学试剂可以快速腐蚀掉金属?越快越好 我要腐蚀断一根不锈钢管我什么都能搞到 说出来我去试验~ 什么样的制氧机适合高原地区使用 世上最大的 峡谷是哪个峡谷 有什么化学品能快速腐蚀木材 在高原使用哪种制氧机好 下列哪个峡谷是世界上海拔最高、最深、最长的峡谷? 通过气体交换,空气中的氧气经过()的系统和()系统,最终到达人体的每个()中,氧化分解有机物,获得人体各项生命活动的() 怎样除去硫酸铜里还有少量的硫酸钠 世界上最大的峡谷是哪里? 黄土高原的形成是由于风力侵蚀还是流水侵蚀,请说明理由 硫酸铜溶液与硫酸钠溶液为什么颜色不同 世界上最大的峡谷是什么峡谷? 大苏打的化学名称怎么读? 如何除去硫酸亚铁中的硫酸钠并提纯硫酸铜原溶液中有硫酸亚铁,硫酸钠和硫酸铜,如何除去硫酸亚铁中的硫酸钠并提纯硫酸铜中的铜离子 世界上最长的峡谷 请问小苏打和大苏打的化学名和俗称 我国最大的三角洲是呃…… 日本和英国都是岛屿国家,日本多火山地震,而英国火山地震很少,为什么? 两个二极管反向串联接地? 结晶度的高低对聚合物性能有哪些影响 请帮忙说说几种换热器形式 4007二极管串联有什么作用 什么是聚合物的结晶 请问有谁知道谁能做一道初中找规律的数学题?要用呀,打心底谢谢给位朋友了1d 四个二极管串联起什么作用 有同学将记录表中4次测量的电阻的平均值作为小灯泡的电阻,你认为这样做正确吗?为什么? c语言中 =n 怎么理解 小苏打和大苏打的化学成分 结晶度的大小对聚合物的性能有哪些影响? 润滑油对金属漆有腐蚀性吗请问汽车润滑油对金属表面喷漆或者刷的漆有腐蚀性吗 用什么区分硫酸钠和稀盐酸 为什么通过蒸馏就可以除去自来水中的氯离子等杂质?原理是什么,只有这种方法吗 机油有腐蚀性吗我经常用缝纫机油擦手电筒,这对手电有腐蚀吗. 稀盐酸溶液和稀硫酸溶液用硫酸钠溶液鉴别对不对,为什么 日本地震对相机影响会持续多久?什么时候能恢复正常?想买相机,结果就地震了.这次地震对数码影响究竟多大很多厂子都关了,松下停产.数码业全部涨价,这叫没影响? 请问航空油润滑油的话腐蚀性有一定的腐蚀性,那么容器采用何种材料或者热处理工艺来满足腐蚀性要求呢 液态的水叫什么? 请问弯头体积怎么算?1727*18mm 90°长半径弯头 对焊 ,请算出体积! 求内行来指点:有关地震导致数码相机涨价~想买个相机,春游用,可是目前单反都在涨,Canon600D,60D;NikonD90,D7000;……等等,商家都说有货,但是国美,大中这种地方,一分钱都不能降,标多少就是多
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘