建设部网站如何下载国标规范,做网站公司促销海报,电商网站商品页的优化目标是什么,wordpress首页登录所谓现代 c#xff0c;指的是从 c11 开始的 c#xff0c;从 c11 开始#xff0c;加入一些比较现代的语言特性和改进了的库实现#xff0c;使得用 c 开发少了很多心智负担#xff0c;程序也更加健壮#xff0c;“看起来像一门新语言”。
从 c11 开始#xff0c;每 3 年发…所谓现代 c指的是从 c11 开始的 c从 c11 开始加入一些比较现代的语言特性和改进了的库实现使得用 c 开发少了很多心智负担程序也更加健壮“看起来像一门新语言”。
从 c11 开始每 3 年发布一个新版本到今年2024已经有 5 个版本了分别是 c11、c14、c17、c20、c23这 5 个版本引入了上百个新的语言特性和新的标准库特性。 c11 新特性
c11 是一个 major 版本现代 c 开天辟地的版本有特别多新东西。
新的语言特性[1]
内存模型——一个高效的为现代硬件设计的底层抽象作为描述并发的基础auto 和 decltype——避免类型名称的不必要重复范围 for——对范围的简单顺序遍历移动语义和右值引用——减少数据拷贝统一初始化—— 对所有类型都几乎完全一致的初始化语法和语义nullptr——给空指针一个名字constexpr 函数——在编译期进行求值的函数用户定义字面量——为用户自定义类型提供字面量支持原始字符串字面量——不需要转义字符的字面量主要用在正则表达式中属性——将任意信息同一个名字关联lambda 表达式——匿名函数对象变参模板——可以处理任意个任意类型的参数的模板模板别名——能够重命名模板并为新名称绑定一些模板参数noexcept——确保函数不会抛出异常的方法override 和 final——用于管理大型类层次结构的明确语法static_assert——编译期断言long long——更长的整数类型默认成员初始化器——给数据成员一个默认值这个默认值可以被构造函数中的初始化所取代enum class——枚举值带有作用域的强类型枚举
新的标准库特性[1]
unique_ptr 和 shared_ptr——依赖 RAII 的资源管理指针内存模型和 atomic 变量thread、mutex、condition_variable 等——为基本的系统层级的并发提供了类型安全、可移植的支持future、promise 和 packaged_task等——稍稍更高级的并发tuple——匿名的简单复合类型类型特征type trait——类型的可测试属性用于元编程正则表达式匹配随机数——带有许多生成器引擎和多种分布时间——time_point 和 durationunordered_map 等——哈希表forward_list——单向链表array——具有固定常量大小的数组并且会记住自己的大小emplace 运算——在容器内直接构建对象避免拷贝exception_ptr——允许在线程之间传递异常 c14 新特性
c14 是一个 minor 版本没什么重要的新特性主要是在给 c11 打补丁为使用者 “带来极大方便”实现 “对新手更为友好” 这一目标。
新的语言特性[2]
泛型的lambdaLambda捕获部分中使用表达式函数返回类型推导另一种类型推断:decltype(auto)放松的constexpr函数限制变量模板聚合类成员初始化二进制字面量 0b或0B 前缀数字分位符deprecated 属性
新的标准库特性[2]
共享的互斥体和锁: std::shared_timed_mutex元函数的别名关联容器中的异构查找标准自定义字面量通过类型寻址多元组较小的标准库特性: std::make_unique, std::is_final 等 c17 新特性
c17 是一个 major 版本。
新的语言特性[3]
构造函数模板参数推导——简化对象定义推导指引——解决构造函数模板参数推导歧义的显式标注结构化绑定——简化标注并消除一种未初始化变量的来源inline 变量——简化了那些仅有头文件的库实现中的静态分配变量的使用折叠表达式——简化变参模板的一些用法条件中的显式测试——有点像 for 语句中的条件保证的复制消除——去除了很多不必要的拷贝操作更严格的表达式求值顺序——防止了一些细微的求值顺序错误auto 当作模板参数类型——值模板参数的类型推导捕捉常见错误的标准属性——[[maybe_unused]]、[[nodiscard]] 和 [[fallthrough]]十六进制浮点字面量常量表达式 if——简化编译期求值的代码
新的标准库特性[3]
optional、any 和 variant——用于表达“可选”的标准库类型shared_mutex 和 shared_lock读写锁和 scoped_lock并行 STL——标准库算法的多线程及矢量化版本文件系统——可移植地操作文件系统路径和目录的能力string_view——对不可变字符序列的非所有权引用数学特殊函数——包括拉盖尔和勒让德多项式、贝塔函数、黎曼泽塔函数 c20 新特性
c20 是一个 major 版本有很重要的更新“The Big Four”即四个重要的特性分别是概念、范围、协程和模块。
新的语言特性[4]
coroutinesconceptsdesignated initializerstemplate syntax for lambdasrange-based for loop with initializer[[likely]] and [[unlikely]] attributesdeprecate implicit capture of thisclass types in non-type template parametersconstexpr virtual functionsexplicit(bool)immediate functionsusing enumlambda capture of parameter packchar8_tconstinit
新的标准库特性[4]
concepts librarysynchronized buffered outputstreamstd::spanbit operationsmath constantsstd::is_constant_evaluatedstd::make_shared supports arraysstarts_with and ends_with on stringscheck if associative container has elementstd::bit_caststd::midpointstd::to_array c23 新特性
c23 是一个 minor 版本。
新的语言特性[5]
新语言功能特性测试宏显式对象形参显式对象成员函数推导 thisif consteval / if not consteval多维下标运算符例如 v[1, 3, 7] 42;static operator()static operator[]auto(x)语言中的衰退复制lambda 表达式上的属性可选的扩展浮点类型std::float{16|32|64|128}_t 和 std::bfloat16_t。有符号std::size_t 字面量的字面量后缀 ‘Z’/‘z’后缀#elifdef、#elifndef 与 #warning通过新属性 [[assume(表达式)]] 进行假设具名通用字符转义可移植源文件编码为 UTF-8行拼合之前修剪空白
新的标准库特性[5]
新的库功能特性测试宏新的范围折叠算法字符串格式化改进“平铺flat”容器适配器std::flat_map、std::flat_multimap、std::flat_set、std::flat_multisetstd::mdspanstd::generatorstd::basic_string::contains, std::basic_string_view::contains禁止从 nullptr 构造 std::string_viewstd::basic_string::resize_and_overwritestd::optional 的单子式操作or_else、and_then、transform栈踪迹stacktrace库新的范围算法新的范围适配器视图对范围库的修改对视图的修改标记不可达代码std::unreachable新的词汇类型 std::expectedstd::move_only_function新的带有程序提供的固定大小缓冲区的 I/O 流 std::spanstreamstd::byteswapstd::to_underlying关联容器的异质擦除 参考
[1] Bjarne Stroustrup. c11感觉像是门新语言. Cpp-Club. Available at : https://github.com/Cpp-Club/Cxx_HOPL4_zh/blob/main/04.md, 2023-6-11.
[2] Wikipedia. c14. Available at: https://zh.wikipedia.org/wiki/c14.
[3] 玩转Linux内核. 快速入门c17了解最新的语言特性和功能. Available at: https://zhuanlan.zhihu.com/p/664746128, 2023-11-06.
[4] AnthonyCalandra. modern-cpp-features:CPP20. Available at: https://github.com/AnthonyCalandra/modern-cpp-features/blob/master/CPP20.md, 2023-3-19.
[5] cppreference. c23. Available at: https://zh.cppreference.com/w/cpp/23, 2024-3-3.