当前位置: 首页 > article >正文

C++ 简介

C++是一种由Bjarne Stroustrup在1979年在贝尔实验室开始开发的一种静态类型编译式通用的面向对象的编程语言。C++被设计为一种“增强”的C语言,保留了C语言的高效性和灵活性,同时引入了面向对象编程泛型编程异常处理等特性。

C++ 关键特点

  1. 面向对象编程(OOP):C++支持封装、继承和多态性,这是面向对象编程的三大基本特征。
  2. 泛型编程:C++通过模板提供了泛型编程的支持,允许开发者编写与数据类型无关的代码。
  3. 直接操作硬件:C++提供了接近硬件层面的操作能力,使其在性能要求高的领域(如游戏开发、嵌入式系统)中非常流行。
  4. 多重编程范式:C++不仅支持面向对象编程,还支持过程式编程和泛型编程。
  5. 异常处理:C++提供了一套异常处理机制,允许程序在遇到错误时优雅地处理。
  6. STL(标准模板库):C++的STL提供了一系列的数据结构(如向量、列表、映射)和算法(如排序、搜索),极大地提高了开发效率。
  7. RAII(资源获取即初始化):C++通过对象的生命周期管理资源,确保资源的正确释放,减少内存泄漏。
  8. 编译时多态:C++通过模板和函数重载支持编译时多态,提高了程序的灵活性和性能。
  9. 模块化:C++支持模块化编程,有助于大型项目的组织和管理。
  10. 跨平台:C++可以在多种操作系统和硬件平台上运行,包括Windows、Linux、macOS等。
  11. 性能:C++以其接近硬件的性能而闻名,通常用于性能敏感型应用。
  12. 标准库:C++有一个丰富的标准库,提供了广泛的功能,如文件操作、网络编程、多线程等。
    C++广泛应用于系统/应用软件、游戏开发、高性能服务器和客户端应用、实时系统、嵌入式固件等领域。

C++ 标准

C++语言自1998年发布第一个官方标准以来,经历了多个版本的迭代,每个版本都引入了新特性和改进。以下是C++各版本之间的主要区别:

  1. C++98:这是第一个 ANSI/ISO 标准化的 C++ 版本,发布于 1998 年。它引入了 STL(标准模板库)、异常处理、I/O Streams、命名空间和 RTTI(运行时类型识别)等重要特性。
  2. C++03:这个版本主要是对 C++98 的一些修正和改进,发布于 2003 年,并未引入新的语言特性,所以一般不把它当做重要版本。
  3. C++11:这是 C++ 历史上最重大的更新之一,有时被称为 C++0x。它引入了自动类型推断(auto 关键字)、基于范围的 for 循环、Lambda 表达式、智能指针、并发支持、移动语义、nullptr 和更强大的模板功能等。
  4. C++14:作为 C++11 的小幅度更新,C++14 引入了一些改进和新特性,包括泛型 Lambda 表达式、返回类型推导、二进制字面量、数字分隔符、弃用属性等。
  5. C++17:这个版本进一步提升了 C++ 的功能和易用性,新功能不是很多,引入了结构化绑定、if constexpr、std::optional、std::variant、std::string_view、并行算法等特性。
  6. C++20:继 C++11 之后又一个重大更新,引入了概念(concepts)、范围库(ranges)、协程(coroutines)、模块(modules)、三元运算符的改进、constexpr 的增强、std::span 等新特性。
  7. C++23:2023 年 7 月份刚确定的新标准,变化包括引入标准库的模块化支持、扩展 constexpr、增加并行算法、ranges 扩展、this 推导、引入更多的属性和注解、增加 std::mdspan、std::generator 等新特性。

每个新版本的发布都旨在提高C++语言的表达力、性能和易用性,同时也为开发者提供了更多的工具和功能来应对不同的编程需求。

特性/版本C++98C++03C++11C++14C++17C++20C++23
标准名称ISO/IEC 14882:1998ISO/IEC 14882:2003ISO/IEC 14882:2011ISO/IEC 14882:2014ISO/IEC 14882:2017ISO/IEC 14882:2017ISO/IEC 14882:2023
异常处理支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️
STL支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️
命名空间支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️
模板支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️支持✔️
智能指针不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
基于范围的for循环不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
Lambda表达式不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
自动类型推断(auto)不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
nullptr不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
并发支持不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
移动语义不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
变长模板不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️支持✔️
数字字面量不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️
二进制字面量不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️支持✔️
std::thread不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
std::optional不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
std::variant不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
std::string_view不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
并行算法不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
if constexpr不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️支持✔️
模块不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
概念不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
协程不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
范围库不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
std::span不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
std::format不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️支持✔️
std::mdspan不支持❌不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️
std::generator不支持❌不支持❌不支持❌不支持❌不支持❌不支持❌支持✔️

http://www.kler.cn/a/421045.html

相关文章:

  • Ubuntu22.04系统源码编译OpenCV 4.10.0(包含opencv_contrib)
  • Python矩阵并行计算;CuPy-CUDA 实现显存加速:;在Python中实现显存加速或卸载;CuPy 和 NumPy 区别
  • PLC协议
  • 《山海经》:北山
  • 在Mac上安装多个Java版本
  • 我不是挂王-用python实现燕双鹰小游戏
  • 恼人的MAVEN,继续报 xx is present in the local repository, but
  • 第十七届山东省职业院校技能大赛 高职组“信息安全管理与评估”比赛通知
  • 7、硬盘品牌分类介绍:西数 - 计算机硬件品牌系列文章
  • java执行规则引擎
  • LeetCode763. 划分字母区间(2024冬季每日一题 23)
  • 基于STM32的气体泄漏检测器
  • 在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)
  • lambda strem流表达式处理工具
  • 第10章 大模型的有害性(下)
  • 初始化webpack应用示例
  • 基于python的某音乐网站热门歌曲的采集与分析,包括聚类和Lda主题分析
  • QT5.14 QML串口助手
  • Docker快速部署RabbitMq
  • 【Vue3】Vue3与React的路由管理对比:详细解析与实战案例!
  • WPF+LibVLC开发播放器-LibVLC在C#中的使用
  • 高速定向广播声光预警系统赋能高速安全管控
  • 代码随想录算法训练营第三十五天 | 01背包问题(二维,一维) | 416. 分割等和子集 | 1049.最后一块石头的重量II
  • JVM 为什么需要类加载机制?深入浅出 JVM 类加载原理
  • GCP : Virtual Private Cloud - 如何构建Nat Gateway
  • 云原生后端:解锁高效可扩展应用的魔法世界