C++是什么?C++是一种广泛使用的计算机程序设计语言,它在C语言的基础上发展而来,增加了面向对象、泛型编程等高级特性,在设计上旨在提供一种高效、灵活和可移植的编程语言,既能够进行系统级编程,又支持高级应用程序开发。
一、概述
C++语言由Bjarne Stroustrup于1979年在贝尔实验室开发,最初被命名为“C with Classes”,意在表明它是C语言的超集,增加了面向对象的特性。1983年,该语言更名为C++。C++的设计目的是提供一种高效、灵活且具有通用性的编程语言,它结合了高级语言的易用性和低级语言的执行效率。
面向对象编程是C++的核心特性之一,它使得程序可以通过定义类和对象来模拟现实世界中的事物和行为,从而提高了代码的可重用性、可扩展性和可维护性。另外,C++还引入了模板(templates)的概念,支持泛型编程,使得编写通用的、高效的代码变得更加容易。
二、语言特点
1、与C语言的兼容性
C++与C语言完全兼容,这意味着C语言的绝大部分内容可以直接用于C++的程序设计。用C语言编写的程序可以不加修改地用于C++,这为现有的C语言程序员提供了平滑过渡到C++的可能性,同时也保留了C语言的优势。
2、数据封装和数据隐藏
在C++中,类是支持数据封装的工具,对象则是数据封装的实现。数据封装是指将数据和对该数据进行操作的函数封装在一起作为一个类的定义,隐藏了类的内部实现细节,只暴露出必要的接口给外部使用。这种方式提高了代码的可维护性和安全性。
3、支持继承和重用
C++支持继承和重用的思想,即在现有类的基础上可以声明新类型。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。子类可以从父类继承所有非私有的属性和方法,从而实现代码的重用。
4、多态性
C++通过多态性为每个类指定表现行为,采用继承和多态的结构形成了一个树型结构。在这个树中,每个子类可以接收一个或多个具有相同名字的消息,而对象动态地决定消息的具体用法。多态性的特性允许使用高级抽象,提高了代码的灵活性和可扩展性。
三、语言标准
标准版本
|
发布时间
|
正式名称
|
更新内容
|
---|---|---|---|
C++ 03
|
2003年
|
ISO/IEC 14882:2003
|
对C++ 98版本的漏洞做了部分修改。
|
C++ 11
|
2011年8月12日
|
ISO/IEC 14882:2011
|
对容器类的方法做了三项主要修改:
1、新增了右值引用,可以给容器提供移动语义。
2、新增了模板类initilizer_list,因此可将initilizer_list作为参数的构造函数和赋值运算符。
3、新增了可变参数模板(variadic template)和函数参数包(parameter pack),可以提供就地创建(emplacement)方法。
|
C++ 14
|
2014年8月18日
|
ISO/IEC 14882:2014
|
C++11的增量更新。主要是支持普通函数的返回类型推演,泛型lambda,扩展的lambda捕获,对constexpr函数限制的修订,constexpr变量模板化等。
|
C++ 17
|
2017年12月6日
|
ISO/IEC 14882:2017
|
新增UTF-8 字符文字、折叠表达式(fold expressions):用于可变的模板、内联变量(inline variables):允许在头文件中定义变量;在if和switch语句内可以初始化变量;结构化绑定(Structured Binding):for(auto [key,value] : my_map){…};类模板参数规约(Class Template Argument Deduction):用pair p{1, 2.0}; 替代pair{1, 2.0};;>;static_assert的文本信息可选;删除trigraphs;在模板参数中允许使用typename(作为替代类);来自 braced-init-list 的新规则用于自动推导;嵌套命名空间的定义;允许命名空间和枚举器的属性;新的标准属性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]];对所有非类型模板参数进行常量评估;Fold表达式,用于可变的模板;A compile-time static if with the form if constexpr(expression);结构化的绑定声明,允许auto [a, b]=getTwoReturnValues()。
|
C++ 20
|
2020年12月7日
|
ISO/IEC 14882:2020
|
新增模块(Modules)、协程(Coroutines)、范围 (Ranges)、概念与约束 (Constraints and concepts)、指定初始化 (designated initializers)、操作符“<=> != ==”;constexpr支持:new/delete、dynamic_cast、try/catch、虚拟、constexpr向量和字符串;计时:日历、时区支持。
|
四、与C语言区别
1、面向对象特性:C++支持面向对象编程(OOP),包括类、继承、封装和多态等概念,而C语言是一种纯粹的过程化编程语言,不支持这些OOP特性。
2、函数重载:C++允许函数重载,即在同一范围内可以有多个同名函数,只要它们的参数列表不同即可。C语言不支持函数重载,每个函数都必须有一个唯一的名称。
3、默认参数:C++允许为函数参数设置默认值,这简化了函数调用,可以在不提供某些参数的情况下调用函数。C语言不支持默认参数。
4、异常处理:C++提供了异常处理机制,可以使用try、catch和throw语句来处理运行时错误。C语言没有内置的异常处理机制,通常使用返回值来指示错误。
5、标准模板库:C++拥有一个强大的标准模板库(STL),提供了一系列的容器、迭代器、算法和函数对象,极大地提高了编程效率和代码质量。C语言没有类似的模板库。