跳转到内容

C++

来自轻之舟百科

C++(英文全称:C Plus Plus)是一种通用的、多范式的编程语言,由丹麦计算机科学家比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)于1979年在贝尔实验室开始研发,最初被称为"C with Classes"(带类的C)。C++在C语言的基础上扩展了面向对象编程、泛型编程和函数式编程等特性,同时保留了C语言对底层硬件的高效访问能力,被设计为具有"零开销抽象"理念的系统级编程语言。[1] 1983年,该语言正式更名为C++,名称源自C语言中的自增运算符(++),象征其为C语言的进化版本。[2] 1985年,斯特劳斯特鲁普出版《The C++ Programming Language》第一版,标志着C++正式进入商业应用阶段。[2] 1998年,国际标准化组织(ISO)与美国国家标准化协会(ANSI)联合批准并发布了首个C++国际标准ISO/IEC 14882:1998(通称C++98),使C++成为具有国际标准的编程语言。[3] 此后,ISO/IEC JTC1/SC22/WG21(C++标准委员会)每三年发布一次新标准,陆续推出C++03、C++11、C++14、C++17、C++20、C++23等版本,持续推动语言现代化演进。[4]

C++
中文名 C++
外文名 C Plus Plus
设计者 比雅尼·斯特劳斯特鲁普
实现者 比雅尼·斯特劳斯特鲁普
发行时间 1985年
标准化组织 ISO/IEC JTC1/SC22/WG21
最新标准 ISO/IEC 14882:2024(C++23)[5]
编程范式 多范式:面向对象、过程式、泛型、函数式
文件扩展名 .cpp、.cxx、.cc、.C、.hpp、.h

发展历史

起源与早期发展

1979年,比雅尼·斯特劳斯特鲁普在贝尔实验室开始开发一种在C语言基础上增加类(Class)机制的语言,最初命名为"C with Classes"。其设计动机源于斯特劳斯特鲁普在博士研究期间使用Simula语言的经验,他希望将面向对象编程的抽象能力与C语言的高效性和底层控制能力相结合。[1] 1983年,里克·马西蒂(Rick Mascitti)提议将语言更名为C++,该名称随后被正式采用。[2]

1985年,C++首个商业版本随Cfront 1.0编译器一同发布,同年斯特劳斯特鲁普所著《The C++ Programming Language》首次出版,成为该语言事实上的权威参考。这一版本引入了虚函数、函数与运算符重载、引用、new/delete运算符及const关键字等重要特性。[1] 1989年发布的Cfront 2.0进一步增加了多重继承、抽象类、静态成员函数和受保护成员等机制,显著增强了面向对象编程能力。[1]

标准化历程

随着C++在商业和学术领域的迅速普及,不同编译器厂商的实现差异导致代码可移植性问题日益突出。1989年,ANSI成立C++标准化委员会,随后ISO于1991年介入,成立联合技术委员会ISO/IEC JTC1/SC22/WG21(通称WG21),负责C++的国际标准化工作。[4]

1998年9月1日,ISO正式发布首个C++国际标准ISO/IEC 14882:1998(C++98),该标准确立了核心语言特性、标准模板库(STL)及异常处理、命名空间等关键机制,为C++的跨平台一致性奠定了基础。[3] 2003年,ISO发布修订标准ISO/IEC 14882:2003(C++03),主要修正C++98中的缺陷并澄清歧义,未引入重大新特性。[2]

现代C++演进

2011年8月,ISO发布C++11标准(原称C++0x),这是C++发展史上的重大里程碑,引入了自动类型推导(auto)、Lambda表达式、智能指针、右值引用与移动语义、范围for循环、并发支持等大量现代特性,标志着"现代C++"(Modern C++)时代的开端。[6]

此后,C++进入每三年一次的固定发布周期。2014年的C++14作为C++11的增量更新,完善了泛型Lambda、变量模板等特性;2017年的C++17引入了结构化绑定、if constexpr、文件系统库及并行算法;2020年的C++20则带来概念(Concepts)、协程(Coroutines)、模块(Modules)和范围(Ranges)等革命性特性,显著提升了语言的表达能力与编译效率。[2] 2024年,ISO发布ISO/IEC 14882:2024(C++23),进一步扩展了标准库并引入了新的语言特性。[5]

语言特性

核心语法与类型系统

C++继承了C语言的过程式编程模型与类型系统,并在此基础上进行了显著扩展。语言支持内置类型(如int、double、char)与用户自定义类型(通过class、struct、enum、union定义),并提供强大的运算符重载机制,允许用户自定义类型模拟内置类型的行为。[1] C++20起引入的概念(Concepts)机制,可对模板参数进行编译期约束,显著提升模板错误的可读性。[2]

面向对象编程

C++支持完整的面向对象编程范式,包括封装(通过访问控制符public、protected、private实现)、继承(单继承与多重继承)和多态(通过虚函数与抽象类实现)。构造函数与析构函数机制支持资源获取即初始化(RAII)惯用法,成为C++资源管理的核心哲学。[1]

泛型编程与模板

模板(Template)是C++泛型编程的基石,允许算法与数据结构独立于具体类型。1998年纳入标准的标准模板库(STL)提供了容器(如vector、map、set)、算法(如sort、find)和迭代器等泛型组件。[3] C++11引入的变参模板(Variadic Templates)与C++14的泛型Lambda进一步增强了泛型编程的灵活性。[2]

标准库

C++标准库随语言标准持续演进,涵盖输入输出流(iostream)、字符串处理(string)、正则表达式、多线程支持、智能指针(unique_ptr、shared_ptr)及文件系统操作等现代编程所需的基础设施。C++20引入的范围库(Ranges)与协程支持,为标准库带来了声明式编程与异步编程的新范式。[2]

应用领域

C++被设计为一种"偏向系统编程的通用语言",广泛应用于操作系统、嵌入式系统、游戏引擎、高性能服务器、金融交易系统、浏览器内核及科学计算等对性能与资源控制要求严苛的领域。[7] 其"零开销抽象"理念——即不使用的特性不产生运行时开销——使其在资源受限环境中保持竞争力。主流C++编译器包括GCC、Clang、MSVC等,支持从微控制器到超级计算机的广泛硬件平台。[7]

参考文献