「C++」C++11的新特性

了解C++的历史可以帮助我们更好的学习语言。

C++11对C++做了很多改进,那么具体是为了弥补哪些缺点呢?我们复盘一下。


1、从C到C++

1979年4月,同样是来自贝尔实验室的本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士与同事接受了一项工作——尝试分析UNIX的内核。但当时没有合适的工具能够有效地完成这个任务,很难将其内核模块化,所以斯 大叔(不是斯达舒哦)的工作进展很慢。同年10月,斯大叔设计了一个预处理程序,称之为“Cpre”。 所谓预处理程序,就是在源程序文件被最终编译之前,对其进行预先处理的程序。Cpre为C语言加上了类似Simula语言的类机制(类机制,一种抽象和封 装的机制。它将描述一个事物的数据抽象成类的属性,而将对这些数据的操作抽象成类的方法,然后将属性和方法封装成类。在稍后的第6章中我们将重点介绍这个 概念)。在这个过程中,斯大叔萌生了创建一门新语言的想法。贝尔实验室对这个想法很感兴趣,就让他组织一个开发小组,专门进行研究。

当时这门新语言并不是叫C++,而是叫C with class,它只是C语言的一个有效扩充,后来才更名为C++。当时C语言已经在所有程序设计语言中居于老大的地位,要想发展一种新的语言,最强大的竞争 对手就是C语言了。C++当时面临两个挑战:第一,C++要在运行时间、代码紧凑性和数据紧凑性方面与C语言相媲美;第二,C++要尽量避免在语言应用领 域的限制。在这种情况下,最简单的方法就是继承C语言的一些特性,让C++语言具备C语言的各种优点。同时,斯大叔为了突破C语言的种种局限,还借鉴了其 他程序设计语言的优点,实践了编程界由来已久的“拿来主义”。例如

C++从Simula拿来了类的概念;

从Algol68拿来了操作符重载、引用以及在 任何地方声明变量的能力;

从BCPL拿来了“//”注释;从Ada拿来了模板、名字空间;

从Ada、Clu和ML拿来了异常处理等。

通过这一系列的拿来动 作,C++具备了多种程序设计语言的优秀基因,既系出名门,又博采众家之长,从而完成了从C到C++的进化。


其后,C++又经历了长期的发展,随着标准模板库(Standard Template Library,STL)的出现、泛型编程的发展,C++在2000年左右出现了其发展史上的一个高峰,而到了2011年,C++的最新标准C++11正 式发布。这个新标准在C++的易用性和性能上作了大量改进,增加了线程库等现代软件开发所需要的内容,这也为C++的发展注入了新的动力。


2、C语言和C++的区别?

这是一个应届生或者新手在面试时经常被问到的问题,从上面的介绍中,我们可以简单归纳出C与C++的区别:

1、C是面向过程的语言,C++是一种面向对象语言,具有继承、封装、多态、抽象这四个面向对象的特性。

2、C++有操作符重载、引用等C没有的。

3、C++有命名空间的概念。

4、C++具有异常处理的能力。


3、C++11的新特性

由于C语言的一些缺点,所以出现了C++11。


当C++驰骋工业界多年后,随着硬件技术的不断发展,特别是多核技术的出现以及Java、C#等新语言的不断涌现,C++的发展受到了很大的冲 击,在业界的应用范围不断萎缩。C++曾经是Visual Studio 6.0中的首选语言,但是在后继版本的Visual Studio中,特别是在微软推出.NET Framework之后,C++的地位不断下滑,被后来居上的C#抢了风头。C++遇到了人生中的一次重大危机。

为了解决C++相对其他编程语言的弱点,2011年8月,C++11新标准出世,那么C++有哪些新功能呢?


1、新的语法糖(为了语言更好用,改变语言语法的行为成为语法糖)

新的语法糖包括:nullptr, auto自动类型推导,范围for循环,初始化列表, lambda表达式等

2、标准库扩充,为了更方便简单的使用C++,C++11对标准库进行了扩充。新增array/forward_list/两个unordered/tuple新容器。

3、右值引用与移动语义

4、.智能指针,C++11引入三种智能指针。

5、.多线程,C++11引入了并发编程库 #include



总结

1、C与C++的区别?

2、C++11的新特性


分享到:


相關文章: