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

专访图书作者祁宇: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(#换成@)。更多精彩内容,请点击社区之星或搜索关键字 图书作者查看。
设计师将吞噬工程师吗? 开源产品系列:小巧灵活的Web框架web.py Windows Server 2012 VHDX格式揭秘 Rovio将赶超Zynga 成为全球最受欢迎游戏公司 Netflix基于AWS的大数据平台Hadoop架构解析 微软开始提供Windows Embedded测试版系统 Aaron Swartz自杀原因存疑 引发互联网连锁反应 重金吸引开发者 BlackBerry10应用36小时增1.5万 把数据中心搬入“空间站” Dell和Intel对OpenStack新兴公司Mirantis投资 快讯:马云自5月10日起不再担任CEO职务 Web工程师必备的43款可视化工具 中国电信天翼开放平台2012年度数据:API调用量破亿 iOS走向开放:UC浏览器iPhone版实现云下载 让Dreamweaver支持cshtml (MVC Razor环境) iOS付费榜首:日历应用Fantastical开发者专访 玩转AdMob移动广告:捕鱼达人的猎财之道 12306抢票插件拖垮GitHub 展望2013 jQuery核心团队成员谈其发展路线 Facebook社交视觉搜索分析:引入“竞价排名”? 移动广告现状5大问题解析 Google将于月底举行Google Glass开发者大赛 分享29个超赞的响应式Web设计 Facebook图谱搜索和谷歌搜索有何不同? Facebook向美国iPhone用户提供免费电话 VMware CTO Steve Herrod离职 加盟风险投资公司 维基百科基金会推出众包旅游项目Wikivoyage 最舒适程序员:工作外包给中国 自己却偷懒 Evernote正在与苹果联合开发硬件记忆工具,未来两年公司上市 Fusion-io发布ioScale 全闪存数据中心时代到来? Agent Dash游戏设计之美:如何用2D打造3D体验? 如何在两个结构相同的库之间倒数?? 请问如何简单确定右键点击的是哪个控件? 有哪位高手可以给出windows98登录时网络服务的身份验证模块的程序或相关资料的呢?非常感谢啦 在CTreeCtrl中同时使用系统图标与自定义图标的问题?? SHGetFileInfo()为什么在Win2000下工作不正常? 请问高手:DataGrid的问题 jsp和servlet是怎样交互的? 请问 有什么方法能实现 在几个数中随机取出几个数 谢谢 请问:在执行文件DPR中有一段代码出现错误,请各问指点! 两个问题:1 关于.NET中 一个新控件propertyGrid1的使用问题;2 我想生成一个由lable和TextBox合成的控件(label在左,TextBox靠其右),怎么办? 分栏打印 依旧是undefined function mysqsl_connect()问题 急:如何在生成的exe中添加新的属性页,显示更多文件信息? V-DVD ROM!? MSDN上的例子需要uafxcwd.lib,怎么找不到呢? 请问窗口的other事件是如何触发执行的 JSP如何学习 vc在什么时候会引起小喇叭的叫声 请教高手,如果在VB里实现内存共享? 用什么方法可以转换图片类型?譬如将BMP格式的转换为JPEG格式的,请各位大哥给点提示!!! 关于vb script数组和函数功能的二个问题!高难度! 关天打印问题? 只能最小化到屏幕的左下角 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm (有关XMLHTTP) 在php中要取出一段字符串的前n个字节,而又要判断最后一个是中文还是英文,如果是中文则将最后半个字符省略应该怎么做? 有在BCB5中用过sapi5朗读中文的朋友,高分送上! 最初级的问题,关于编译程序的。 重庆市信息产业办公室荣获全国最差信息产业办公室称号 大家用PB创建Jaguar应用程序时,一般创建一个大包还是多个包阿? 奇怪的问题,来者有分!没回答问题的先到先得! 如何把临时表建在内存中 请教一个关于DELPHI多线程的问题 *急:无为,acptvb,请帮忙看看http://www.csdn.net/Expert/topic/426/426766.shtm(有关XMLHTTP) 比爱情少一点,比友情多一点,即不讨厌又不来电,你能做到吗? 请教一个问题,一个分两帧的窗口,分别是两个CView的子类。一个view里的下拉框选中一条记录,使另一个view刷新。不知道用什么mfc函数。 有关新开窗口的问题! please intrduce a good muti-root soft for win95,win98,winme,win2000,winxp 求助:哪位大侠能介绍一下网络传输设备(象 HDSL、Cable Modem)的品牌、厂家和性能? 我的ie浏览器怎么了? 搞软件开发时应不应该是一边看书一边搞开发? 请教:C中的共同体是什么?谁能解释一下或举例说明 关于线程套间问题。 请教各位在oracle中如何在date字段下条件? Window me对ADO是不是支持的不够好??? 请问csdn.net使用shtml如何构架的! 安装Acrobat后,只出现一个PDF Writer虚拟打印机,Adobe Distiller却死活装不上,不知是何原因? sybase anywhere5.0 支持 mid 函数吗,如果支持该怎么写 微软的一道面试题!!!!! help me!(53)问题解决以后再送100分 为什么我的win2000server上装不上Exchange5.5? 虚拟DVD-ROM????!!!!!!!!!!!!!!!!!!!!!!!!!!!!???? 练习4:物体静止在水平桌面上,物体对水平桌面的压力( )练习4:物体静止在水平桌面上,物体对水平桌面 的压力( ) (1)就是物体的重力 (2)大小等于物体所受重力的大小 (3)此压力是由于桌面的 如何用激光笔证明桌面受力后发生了形变这是一道初三物理实验题, 关于弹力与摩擦力关系的多选题目关于弹力与摩擦力关系,下列说法正确的是____.A.两物体间若有弹力,就一定有摩擦力.B.两物体间若有摩擦力,就一定有弹力.C.弹力和摩擦力的方向必互相垂直.D. 形容很无奈的诗句.他到失去了才懂得珍惜我,但他的死性不改让我很无奈 摩擦力是不是弹力摩擦力也有弹性形变 关于物理模型中弹簧、橡皮绳的形变,弹力.绳子的张力突变物理模型中弹簧、橡皮绳的形变不能发生突变,弹力不能发生突变.绳子的张力可以突变.中的突变指的是什么?会发生什么效果.有什么 求:形容一个人不懂得珍惜或失去后才懂得挽留的词语或成语,谢咯~如上, 解释一下"茶杯对桌面的压力是由于茶杯发生形变而产生的" 所有压力都是因为形变而产生的吗? 高一物理:为什么绳子的受力可以突变而弹簧不能 形容不懂得珍惜而后悔的诗句 杯子形变? 为什么弹簧的弹力不能瞬间消失,而绳子和杆的弹力可以瞬间消失? 坐电梯是做的是平移运动.( ) 判断一下错对.呵呵,标准答案是:为孩子想不通, 为什么说“弹力和摩擦力在本质上由电磁力引起”? 在剪断的瞬间,是连着绳的物体受力不会突变还是连着弹簧的物体? 《蝉》古诗中感受到了作者怎样的思想感情垂緌饮清露,流响出疏桐。居高声自远,非是藉秋风。 下列说法正确的是?A,木块放在桌面上对桌面的压力是由于 木块发生微小形变而产生的 B,木块放在桌下列说法正确的是?A,木块放在桌面上对桌面的压力是由于木块发生微小形变而产生的B,木块 书放在水平桌面上,桌面受弹力作用,产生弹力的直接原因是 A书的形变 B桌的形变 C书.桌的形变 D书受的重力刚考完试 这题不确定 在古诗词中的夏天 体会到了作者怎样的情感? 接触力按性质可归纳为弹力和摩擦力,他们本质上都是由电磁力引起的为什么是由电磁力引起的?分子力都是属于电磁相互作用吗? 静止放在水平桌面上的书,受到的作用力?能不能讲讲受力分析.能不能答得标准一点 古诗词、阅读短文表达情感归纳古诗词或阅读短文表达了作者怎样的感情?比如对美好生活的向往、开心、悲伤 10和100的计数单位各是多少?百位、十位、个位都说清楚 静止在水平桌面上的书,受到( )和( )的作用,这两个里的关系是大小( ),方向( ),作用在( ) 丢怎么组词 十位的计数单位是什么 摩擦力的大小与弹力成正比吗?说明理由. 判断题:经过一点可以画出无数个圆.究竟是对还是错? 0.80的计数单位是?他有几个这样的计数单位? 摩擦力的大小与什么有关? 判断题##(对的画√错的画×)1.等腰直角三角形中的三个内角比是1:1:2 ()2.三角形只有三条边 ()3.有有共同顶点的两条射线可以构成一个角 ( ) 一个木块平放在水平面桌面上这个状态一共有几个弹力 木块和桌面都有发生形变吗 滑动摩擦力与弹力的区别和联系是什么? 数学判断题:判断对错1.观察条形统计图的时候,可以根据直条的高低或长短来判断数量的多少.2.在2 3 8 5 2 6 7 2 4这一组数中,它的中位数是4,众数是2. 0.80的计数单位是( ) 滑动摩擦力中,摩擦力方向与其物体弹力方向有什么关系吗?是永远相互垂直吗?摩擦力方向与其物体弹力方向有什么关系 是否相互垂直 如果不是请举例 判断题.正确的画“∨”,错误的画“×”,并订正.(1)三角形的面积等于平行四边形面积的一半.…………………………………( )(2)两个完全一样的梯形可以拼成一个平行四边形.……… 怎样理解常见的弹力、摩擦力是由电磁力引起的? 滑动摩擦力中,摩擦力方向与其物体弹力方向有什么关系吗?是永远相互垂直吗?拜托各位了 3Q摩擦力方向与其物体弹力方向有什么关系 是否相互垂直 如果不是请举例 英语翻译难道没人会吗? 物理:弹性形变及弹性的定义弹力产生的两个条件、都有什么力属于弹力?弹力的定义、绳的拉力的方向、压力和支持力的方向。弹簧的弹力F=kx,x表示什么?k叫做弹簧的什么?单位是什么?k的 为什么有摩擦力一定要有正压力(弹力)? 如图,判断题 0.53与0.530的大小相等,但它们的计数单位不同对吗 地球的引力是否就是地球的重力呢?是磁场力吗?地球的引力、重力、磁场力是一回事情吗?地球的重力是因为地球的磁场而产生的吗?如果答的好,分数翻倍奖励, 数学判断题(3道)脱式计算(2道)解决问题(1道)判断:1.一个小数3.012先把它扩大10倍后,再缩小到它的1/100,小数的大小不变.()2.能被2整除的数都是合数,不能被2整除的数都是质数.()3.一个半圆的直径 弹力是指发生弹性形变的物体因要 而对使它发生弹性形变的物体施加的力,弹力的方向总是跟物体形变的方向 ,且与接触面 .(当中空白填写答案) 有摩擦力一定有弹力?说明原因语言要简洁 请珍惜眼前这个人用英语怎么说"请珍惜眼前这个人"用英语怎么说? 那请问弹力是不是使弹力的施力物体发生弹性形变的力的反作用力? 有摩擦力就一定有弹力吗 珍惜爱你的人和你爱的人五百次的回眸才能换来今生的擦肩而过.可以一秒钟遇到一个人,一分钟认识一个人,一个小时喜欢上一个人,一天时间爱上一个人,但是却要用一辈子去忘记一个人.如果, 弹力 和摩擦力的关系是 有弹力一定有摩擦力,还是 有摩擦力一定有弹力? 0.92里面有几个千分之一的计数单位 “珍惜眼前的幸福”怎么翻译成英文? 弹簧产生的弹力是否与使弹簧形变的力相等?我想知道这个 因为胡克定律F=kx的F究竟是指的弹簧产生的弹力还是使弹簧形变的力? 8.95的计数单位是(),它里面含有()千分之一 .静止在水平桌面上的物体,对水平桌面的压力? . 这压力是由于桌面的形变而产生的 错在哪里? 什么是计数单位? 是否在弹力存在的施力物与受力物都发生了弹性形变?如果不是,请举反例.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn