网站首页 > 博客文章 正文
关于 c++ 标准 11 、14 、 17 、20
关于c++标准, 直接问 文心一言
1、c++ 11
C++11标准中增加了一些新的关键字,这些关键字主要用于支持新引入的语言特性。以下是一些C++11中新增的关键字:
- auto:用于自动类型推导,编译器可以根据初始化表达式自动推断出变量的类型。
- nullptr:表示空指针常量,与C语言中的NULL有所不同,nullptr是类型为nullptr_t的常量。
- static_assert:用于在编译时执行断言,可以用来检查类型或值的约束条件。
- extern "C":用于指定代码的链接语言为C,以便在C++代码中调用C语言库函数。
- alignas:用于指定变量或类型的对齐方式。
- noexcept:用于表示函数不会抛出异常。
- override:用于表示虚函数在基类中的实现被重写。
- final:用于表示类或成员函数不能被继承或重写。
- nullptr_t:表示空指针类型的别名。
- auto_ptr:已经被弃用,不再建议使用。
除了新增的关键字之外,C++11还引入了一些新的特性,如智能指针、范围for循环、lambda表达式等,这些特性可以与原有的关键字一起使用,提高代码的可读性和可维护性。
2、C++ 14
C++14中没有新增的关键字,只增加了一些特性。
C++14是C++语言的一个版本,它在C++11的基础上进行了一些改进和扩展,但并没有新增关键字。C++14主要增加了以下特性:
- 扩展的模板元编程(Extended Template Metaprogramming):C++14引入了新的模板元编程语法,包括嵌套模板、模板别名和模板参数包等,使得模板元编程更加灵活和强大。
- 初始化列表(Initializer Lists):C++14引入了初始化列表语法,允许使用花括号 {} 初始化对象,这对于构造函数的参数传递、变量初始化等场景非常有用。
- 尾递归优化(Tail Call Optimization):C++14引入了尾递归优化,允许编译器在某些情况下将递归调用转换为循环调用,从而提高递归调用的效率。
- 范围for循环(Range-based for loop):C++14引入了范围for循环语法,允许使用基于范围的for循环来遍历数组、容器等数据结构。
- 函数默认参数(Default Function Arguments):C++14允许在函数声明时指定默认参数值,使得函数调用更加灵活和方便。
- 属性(Attributes):C++14引入了属性语法,允许在函数、变量等声明时添加一些元数据信息,用于指示编译器进行特定的优化、警告等操作。
- 类型特性(Type Traits):C++14扩展了类型特性库,增加了更多的类型特征模板和算法,用于操作和查询类型特性。
- 右值引用(Rvalue References):C++14对右值引用进行了改进,允许将右值引用作为模板参数传递给函数,提高了代码的灵活性和可读性。
需要注意的是,虽然C++14没有新增关键字,但它在语法和标准库方面进行了一些改进和扩展,这些改进和扩展对于提高代码质量和开发效率非常有帮助。
3、C++ 17
C++17中没有新增的关键字,只增加了一些特性和改进。
C++17是C++语言的一个版本,它在C++14的基础上进行了一些改进和扩展,但并没有新增关键字。C++17主要增加了以下特性:
- 结构化绑定(Structured Binding):C++17引入了结构化绑定语法,允许使用多个变量同时从元组或数组中解构。
- 线程局部存储(Thread-Local Storage):C++17允许使用__thread修饰符声明线程局部变量,使得每个线程都有自己的变量副本。
- 范围for循环的初始化(Range-based for loop initialization):C++17允许在范围for循环中使用初始化语句来初始化变量。
- constexpr函数在类的成员函数中使用:C++17允许在类的成员函数中使用constexpr关键字,使得成员函数可以在编译时计算常量值。
- 字符类型的新操作符(New operators for character types):C++17引入了几个新的字符类型操作符,包括std::iswdigit、std::towctrans、std::wctrans等,用于处理宽字符类型的操作。
- 整数类型的改进(Improvements to integer types):C++17对整数类型进行了改进,包括引入了新的整数类型(如std::int128_t、std::uint128_t)和改进了现有整数类型的表示范围和精度。
- 改进的异常处理(Improved exception handling):C++17对异常处理进行了改进,包括引入了noexcept异常规范和改进了异常对象的拷贝行为。
- 类型特性改进(Improvements to type traits):C++17对类型特性库进行了改进,包括扩展了std::is_constructible、std::is_assignable等类型特性模板的用法和增加了新的类型特性模板。
- constexpr改进(Improvements to constexpr):C++17对constexpr进行了改进,包括允许在模板参数中使用constexpr函数和增加了对constexpr构造函数和析构函数的支持。
需要注意的是,虽然C++17没有新增关键字,但它在语法和标准库方面进行了一些改进和扩展,这些改进和扩展对于提高代码质量和开发效率非常有帮助。
4、C++ 20
C++20中新增的关键字包括:
- requires:用于指定函数模板的约束条件。
- constinit:用于指定变量必须用常量初始化。
- consteval:用于在编译时执行常量表达式。
- co_await、co_return、co_yield:用于支持协程操作。
- char8_t:表示8位无符号字符类型。
此外,C++20还引入了一些新特性,包括模块、概念、初始化列表等。其中,模块是一个非常重要的新特性,它改变了传统的头文件包含方式,使得代码更加清晰、易于维护和编译速度更快。
C++20引入了模块的概念,用于解决传统头文件包含机制在编译时间和程序组织方面的问题。
传统的头文件包含机制会导致编译时间增加、标识符冲突等问题。而C++20的模块可以简单地类比为头文件(Header File)+翻译单元(Translation Unit),模块的源文件与导入该模块的翻译单元是独立编译的,因此编译过程中模块只需要编译一次。
在C++20中,可以使用export module关键字声明模块接口单元,该单元可以包含可供导出的C++实体(类、函数、变量等)。在模块接口单元中也可以进行C++实体的定义。此外,还可以使用import关键字导入其他模块的接口单元,以使用该模块中导出的C++实体。
C++20中的模块有以下优点:
- 提高编译速度:由于模块是独立编译的,只有在需要时才编译,从而减少了重复编译的工作量。
- 改善代码组织:通过将代码拆分为不同的模块,可以更好地组织和管理代码,提高代码的可维护性和可读性。
- 减少头文件依赖:模块的使用可以减少头文件的依赖关系,降低头文件之间的耦合度,从而减少名称冲突的可能性。
- 支持静态组件和库:模块可以作为静态组件或库的一部分,方便地集成到应用程序中。
需要注意的是,C++20的模块机制仍然处于实验阶段,某些编译器可能不完全支持该特性。因此,在实际使用中需要注意兼容性问题。
猜你喜欢
- 2024-10-02 以轻便和强性能,颠覆AI创作!XPS 14值得入手
- 2024-10-02 C++用于Linux内核开发,曾被Linus强烈反对,现在时机终成熟?
- 2024-10-02 谷歌安卓14为平板引入新特性,增强笔记体验
- 2024-10-02 【紫微斗数】排盘技巧004之十四主星的基本特性与影响
- 2024-10-02 曾遭 Linus 炮轰“很烂”的 C++,现受开发者支持:Linux 内核应从 C 转到 C++!
- 2024-10-02 C++类型转换全解析:安全与效率的平衡
- 2024-10-02 iPhone 15脱胎换骨!14系列上的9大特性在15上会消失
- 2024-10-02 ColorOS 14正式版今日起推送,OPPO Find N2/ 一加11等首发
- 2024-10-02 首发酷睿Ultra平台!华硕灵耀14 2024 AI超轻薄本上手体验
- 2024-10-02 苹果iOS 17、macOS 14新特性:可在任意文本框内自动填充内容
你 发表评论:
欢迎- 07-08Google Cloud Platform 加入支持 Docker 的容器引擎
- 07-08日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 07-08美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- 07-08GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 07-08谷歌推出Cloud Dataproc,缩短集群启动时间
- 07-08Infovista与Google Cloud携手推进射频网络规划革新
- 07-08比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- 07-08BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- 最近发表
-
- Google Cloud Platform 加入支持 Docker 的容器引擎
- 日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 谷歌推出Cloud Dataproc,缩短集群启动时间
- Infovista与Google Cloud携手推进射频网络规划革新
- 比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- NCSA和Google Cloud合作开发AI驱动的网络防御系统,加强泰国网络空间的安全性
- SAP将在沙特阿拉伯 Google Cloud 上推出BTP服务
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)