技术在不断发展,C++也在不断进步。自从斯大叔发明并实现了C++语言之后,在面向对象语言迅速发展
的时代背景下,C++以其面向对象的语言特性、对C语言的良好兼容、以及极其接近C语言的性能效率,在
工业界占据了相当大的份额,成为程序设计语言中的无冕之王。在其后的发展中,C++又不断引入新的内
容。标准模板库和Boost程序库的出现、泛型程序设计的流行,使得C++牢牢占据了TIOBE编程语言排行榜
前三名的位置,成为业界最流行的程序设计语言之一,成为一个众人传颂的传奇。
然而,随着硬件技术的不断发展,特别是多核技术的出现以及Java、C#等新语言的 不断涌现,C++的发展
受到了很大的冲击,在业界的应用范围不断萎缩。C++曾经是Visual Studio 6.0中的首选语言,但是在后
继版本的Visual Studio中,特别是在微软推出.NET Framework之后,C++的地位不断下滑,被后来居上
的C#抢了风头。很多钟情于C++的程序员不禁发出这样的感叹:“C++老矣,尚能编否?”
虽然C++在发展历程中经历了上述小小的波折,但是应当看到,世界上还有无数的C++代码在 稳定地运行
着,这些代码还需要维护和升级。另外,C++在某些领域(比如,操作系统编程、游戏开发、服务器端开
发等)仍具有不可替代的优势,无数基于C++的新项目正在进行着。为了应对现代程序设计语言的发展及
业界的需求,C++也积极汲取现代程序设计语言的精华,C++的新标准C++11C++11正是在这种背景之
下应运而生的。
C++11是自199 8年C++首次被ISO标准化以来变化最大的一个新标准,它主要在以下两个方面对C++进行
了革命性的改进和增强:
一方面,C++11让C++更 加易于使用。我们都知道,C++以其语法简洁而著称于世,虽然简洁的语法受到
编程高手们的喜爱。同时,C++也非常灵活而自由,我们几乎可以在C++中完成任何我们想要完成的事
情。简洁、自由和灵活是一把双刃剑,它让C++拥有无限的能力,但同时也让C++在程序员们的心目中成
为一门难学难用难以掌握的编程语言,特别是让一些初学者望而却步,阻碍了C++的进一步发展。为了改
变这一现状,C++11加入了很多改善其易用性的语法特性,并从其他主流的编程语言(特别是Java)中借
鉴吸收了很多旨在改善C++易用性的语法特点。例如,C++11提供了auto这种特殊的数据类型,使用它作
为变量的数据类型,编译器可以根据变量的初始值自动推断其合理的真实数据类型,省去了程序员确定复
杂变量的数据类型的繁琐;C++11开始支持Lambda表达式,让C++中匿名函数的定义和使用成为可能;
C++11从Java和C#中借鉴了序列for循环语句,让针对某个容器的循环遍历更加简单;C++11从Java中借
鉴了函数属性,从而可以对函数进行更加灵活的修饰。例如,我们可以使用noreturn指明一个函数没有返
回值,也可以使用final限制某个虚函数被派生类重载,函数属性的引入满足了我们对函数的不同需求。
另一方面,C++11让C++的性能更高。相对于其他主流的高级编程语言而言,接近于低级语言的高性能 表
现,应该是C++最大的优势了。但是C++11并不满足于C++现有的性能表现,通过增加新的语法特性、改
写标准库等手段,想榨干C++身上最后的一滴性能血液。例如,C++11提供了对右值引用、移动语义的完
全支持,解决了从函数返回一个大对象的问题;利用新的语法特性对标准库进行了大规模的改写,极大地
提高了标准库的性能表现;特别值得一提的是,为了适应当今越来越普及的并行计算,充分利用主流的多
核CPU的计算资源,C++11在标准库中对并行计算提供了全面的支持,我们可以通过线程thread对象轻松
完成线程的创建,也可以通过条件变量对线程的执行情况进行控制。对并行计算的完全支持,让C++11拥
有了更加优异的性能表现。
正是C++11在这两个方面的 大力改进,不仅进一步增强了C++在性能方面的优势,做到了扬长;同时也改
善了C++的易用性,做到了避短,使得C++成为了一门“又快又好”的程序设计语言。这些新特性给
C++注入了新的活力,使得C++重新焕发青春,带来C++的复兴。C++也必将续写它那不朽的传奇。
最关键的一点,我看好C++11对多线程的支持,这将让他在多核心的服务器编程上大展拳脚。
内容来源: https://www.zhihu.com/question/19741242
附录: 有哪些支持C11标准的编译器?https://www.zhihu.com/question/33209351