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

专访图书作者祁宇: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资料 实现图片平铺于窗体中-VB资料 使程序的标题条闪烁 -VB资料 使窗口总在最前 -VB资料 使窗体右上角的X按钮失效 -VB资料 VB使用 WIN95 的选择目录对话框 使指定窗口总处于其他窗口之上 -VB资料 通用对话框专辑(全) -VB资料 透明的Form上显示背景透通图 -VB资料 图像在图片框中的滚动 -VB资料 拖动无标题窗口-VB资料 拖动无系统标准标题栏的窗口-VB资料 文本框中光标位置的获得-VB资料 无关联程序时开启“打开方式”窗口 -VB资料 显示 Combo 的下拉条 -VB资料 显示Windows系统的标准ABOUT窗口-VB资料 显示程序的版本 -VB资料 显示窗口的水平和垂直滚动条-VB资料 一劳永逸让VB自动改变控件大小 移动没有标题栏的窗口 -VB资料 隐藏Win95任务栏 -VB资料 VB用API函数打开 MS CommonDialog对话框 VB用MSGBOX函数设计版权信息: 用VB5 制作“闪烁标题栏”窗体 用VB5.0获取正在系统中运行的窗口标题 用VB实现浮动按钮 用VB5实现窗口图象缩放、滚动技巧 用VB6建立带光栅的超级开始菜单 用VB尝试新的界面风格 用VB建立字符界面的控制台程序 如何在CFormView中添加位图背景?? 谁来帮我看看这几行程序!我实在无法解决,谢谢! 请问如何自己编程使用Logitech QuickCam 人工智能的问题(乜人都要睇) 400分题目问题要解决了就立刻、马上、立即、给分! 菜鸟问题c++中清屏函数在哪? 请问哪里有c#语法的速查手册,最好有与vb的对照版? ISA声卡,CD与ME! 帮帮忙,一个很简单的sql语句 机器的电源关不了?(重谢!) 对话框算窗口吗? Delphiz中的Excel报表问题(十万火急!!!) help 请各位帮忙介绍一本linux的入门教材,多谢!! 菜鸟送分了!(报表打印问题) 学编程N个月了,我今天要学会HOOK到底是什么函数怎么用的,想吐血的先近来~~~~ 报告D6的一个BUG 要编写象boot.ini这样的 文件 我 应该学习什么 project工程文件????? 杭州的Delphi程序员,我在华星。留下QQ和Email吧。 求救一个语句 如何实现数据库的事务操作,对记录进行编辑?高分相送。 通信 ISP拨入电话,北京地区还有八位的吗? 毕业设计的朋友进来签到?(我做个统计) 如何引用上一级对话框 怎样获得主板BIOS版本\厂商号,版权? 中科院软件学院的项目经理硕士怎么样?听说师资力量很好 小问题:如何获得字段protect的值? 有可能在游戏中,例如星际,弹出对话框吗? oracle监听配置 如何实现 透明贴图--屏蔽图片背景颜色,显示图片主体 和 底图背景? 我想看世界杯,但电视偏偏坏了,还正好从开赛的时候开始坏,真是受不了啊,天哪 世界杯开始了。。没地方看球。。惨啊。。 请大家讨论中专生与 VC++(UP 者有分!) 一个极菜极菜的代码问题。。。。---此恨绵绵无绝期 New transaction cannot enlist in the specified transaction coordinator 我很遵守纪律的.为什么我的信誉分数少了几分不公平啊! 请问有长沙的软件朋友吗?能否介绍份工作!熟悉DELPHI及PB编程,SQL SERVER数拒库。能用VC++SDK编程,了COM技术。万份感谢!zongpenghou@ 紧急问题 请问有长沙的软件朋友吗?能否介绍份工作!熟悉DELPHI及PB编程,SQL SERVER数拒库。能用VC++SDK编程,了COM技术。万份感谢!zongpenghou@ jobuson兄请进 在C++Builder中怎样使Mediaplayer控件实现连续播放多个文件的功能? HELP ME!!(vb调用AIP涵数) 请问有长沙的软件朋友吗?能否介绍份工作!熟悉DELPHI及PB编程,SQL SERVER数拒库。能用VC++SDK编程,了COM技术。万份感谢!zongpenghou@ 动态菜单的实现及关联方式? 请问有长沙的软件朋友吗?能否介绍份工作!熟悉DELPHI及PB编程,SQL SERVER数拒库。能用VC++SDK编程,了COM技术。万份感谢!zongpenghou@ 请问有长沙的软件朋友吗?能否介绍份工作!熟悉DELPHI及PB编程,SQL SERVER数拒库。能用VC++SDK编程,了COM技术。万份感谢!zongpenghou@ 帮我看看,51476905 有关tc的一些问题? 我的电脑上发现Folder.HTT病毒,怎么办? 高压锅的直径为24CM限压出气口直径为3.5MM限压阀质量为100G高压锅内最大气压为多少?锅顶至少承受多少压力 管道离心泵哪家质量最好 太阳不是火球吗?可是宇宙中没有氧气,那太阳是怎么燃烧起来的?我知道宇宙中氢气最多可是需达到熔点氢气才会爆炸? 立式多级泵有那些品牌? 格力空调:输入功率1140W 制冷功率3200W 每小时多少度电啊?格力挂式空调:输入功率1140W 制冷功率3200W 每小时多少度电啊? 脱硫汽水分离器在脱水机开一个小时后液位过高报警,检查排液管道正常,真空泵过电流,不知原因,汽水分离器确定是液位过高,浆液吸至真空泵经过真空泵汽水分离器流至滤布冲洗水箱,导致 怎样才能让生活更精彩 光在水中和玻璃中的传播速度各是多少米/秒 太阳是个燃烧的火球,可是燃烧要氧气,是不是就是说太阳上有氧气? 小明家的小汽车容积是56升,行驶50千米耗油量4斤,小明家周末驾车盗距离家75千米的家乡,请你算一算,一箱汽油够吗(用比例解) H2表示氢气又表示2个氢原子或者1个氢分子吗? 真空泵汽水分离器液位过低有何危害? 怎么才能让生活更精彩! 氢气中氢元素的化合价怎么计算,要写计算过程 (H2) H2 O2 CO2 三者的质量比为1:8:11时 则它们物质的量之比?2.硫酸的相对分子质量是?摩尔质量是? 怎样让生活更精彩…… 合成氨反应热化学方程式急 H2与CH4混合物质量为18g,它们物质的量之和为2mol,求H2与CH4质量 怎样能让生活更精彩? 合成氨的化学方程式要不要用可逆符号啊? 合成氨反应的平衡常数很小,所以在工业上采取气体循环的流程.即反应后通过把混合气体的温度降低到 _ ...合成氨反应的平衡常数很小,所以在工业上采取气体循环的流程.即反应后通过把混合 如何让生活过的更精彩?分年龄层 浓硫酸可以和NaBr加热反应吗? 下列关于H2和H2O的叙述正确的是( ) A、都是化合物 B、都含有氢气分子 C、都含有氢离子 D、都含有氢元下列关于H2和H2O的叙述正确的是( )A、都是化合物 B、都含有氢气分子 C、都含有氢离 1路公交车每隔10分钟发出一辆车,一共发了8辆车.从第1辆车开出到第8辆车开出一共经过了多少时间? 为什么去除氧气的水中仍然有氧元素?那其中含有氧原子或者氧分子吗?氧气是由两个氧分子组成的吗?请说明理由 空调制冷量3550W是什么意思? 公交汽车总站向第一条线路上每隔10分钟开出一辆车,第一辆车6:00开出,到8点时,共开出几辆车?要算式 如何分离木材燃烧时产生的苯并芘有什么方法可以分离木材燃烧时产生的黑烟中的苯并芘?有那位专家可以帮我解决吗? 请问空调制冷量是3500W,制热量是3850W,在其制冷和制热时分别每小时耗电多少度? 已知正比例函数和一次函数的图象都过点M(3,4),且正比例函数与一次函数的图象与y轴围成的面积为15/2…已知正比例函数和一次函数的图象都过点M(3,4),且正比例函数与一次函数的图象与y 苯并芘燃烧生成二氧化碳合水 空调制冷/制热 额定功率 1490/1500 (3600) 什么意思 怎样种植西瓜? 食品中苯并芘的来源是什么 光线在水中和玻璃中的传播路线还要举出例子 西瓜种植技术瓜藤为什么长不多,西瓜产量低 哪里可以搞到苯并芘就日常生活里. 光在水中和在玻璃中的速度是多少? 西瓜的种植过程种植时要注意什么? 正丙醇+浓硫酸消去反应的化学方程式? 光在水中和玻璃中的速度是多少?用米(M)来算的!是用米(M)来算的!切记!是用米(M)来算的! 西瓜怎样种植 2-丙醇与浓硫酸140℃取代的化学方程式 光在水中和玻璃中的速度(要数字) 光在玻璃中传播的速度是在真空传播的多少 形容频率应该用“高低”还是“大小”还是“快慢”?希望大家各抒己见! 4g的H2的摩尔质量是多少 对于全球变暖的现象您有什么感想? 电动车充电器不冲电怎样检查是冲电器坏或是电池坏 H2能不能表示一个氢分子由两个氢原子构成? 科技书籍读后感关于科技书籍的读后感有没有啊,要500字以上,发到1092629831的邮箱! 活性炭 煤炭 木炭 组成上的差异 2-丙醇与氧化亚铜反应方程式?2-丙醇与氧化铜反应方程式? 8424西瓜是不是转基因西瓜? 一般椰壳活性炭的孔径大小在什么范围?其他类型的活性炭孔径范围是多少(比如木活性炭、煤活性炭)? 急,在线等,电动车第一次充电今天刚买电动车,第一次充电,从五点开始,刚才不小心碰到插头,指示灯变绿了,再也变不回去了.怎么办?第一次充电 还没满十二小时呢!急死了.谢谢各位了! 经常在路边听到卖西瓜的小贩喊“南汇西瓜8424”,那这8424是什么意思呢? 管道离心泵那家的质量好? 请问太阳是个火球吗?如果是火球她烧的是什么油?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘