
C++ 新特性
文章平均质量分 96
介绍C++ 14 17 20 特性
泡沫o0
《C++编程之禅:从理论到实践》 作者,目前从事车载相关行业。
个人兴趣在于不断学习和探索新知识,这也是我职业生涯中不断前进的动力。通过我的博客,我希望与大家分享这一过程中所获得的知识和经验。需要 商务合作 可直接私信。
技术是一片深不可测的海洋,每一次深入学习都是对未知领域的探索和对自我能力的挑战。在这个广阔的知识领域中,我们都是探险者,渴望揭开更多的奥秘,追求技术的极致。
展开
-
【C++ 20 新特性 范围库 】深入解析C++20范围库:从引入背景到实际应用
在C++的发展过程中,迭代器(Iterators)一直是遍历和操作容器元素的核心机制。然而,随着现代C++编程需求的不断提升,迭代器在使用中暴露出了一些局限性:- **复杂性高**:传统迭代器的使用需要手动管理循环和条件判断,代码冗长且易出错。- **组合不便**:对数据进行多步处理(如过滤、转换、排序等)时,需要创建多个临时容器,导致代码难以维护。- **缺乏抽象**:迭代器操作过于底层,缺乏高层次的抽象,难以表达复杂的数据处理逻辑。为了应对这些挑战,C++20引入了范围库(Ranges Li原创 2024-11-03 09:00:00 · 2104 阅读 · 0 评论 -
【C++ 20 新特性 std::span 】深入理解 C++20 的 std::span:高效管理连续数据的利器
在现代 C++ 开发中,管理和操作连续数据序列是一项常见且关键的任务。传统上,开发者通常依赖于指针、数组或标准容器(如 `std::vector` 和 `std::array`)来处理这些数据。然而,这些方法往往存在一定的局限性,如类型安全性不足、灵活性不够以及潜在的性能开销。为了解决这些问题,C++20 引入了 `std::span`,一个轻量级且高效的工具,用于表示对连续数据序列的非拥有性视图。本章将深入探讨 `std::span` 的基础概念、优势以及基本用法,帮助您全面理解这一强大特性。原创 2024-11-02 22:09:14 · 1192 阅读 · 0 评论 -
【C++ 20 新特性 新增原子操作】深入理解 C++20 的 `std::atomic_ref`:并发编程的新利器
`std::atomic_ref` 是 C++20 引入的一个模板类,定义在 `` 头文件中。它允许开发者对已有的对象进行原子操作,而无需将对象本身定义为 `std::atomic` 类型。通过 `std::atomic_ref`,可以在多线程环境下安全地读取和修改共享数据,避免数据竞争和未定义行为。原创 2024-10-31 18:18:15 · 866 阅读 · 0 评论 -
【C++ 20 新特性】constinit 说明符的用法
`constinit` 说明符用于声明具有静态或线程存储期限的变量,并断言该变量必须进行**常量初始化**(constant initialization)。如果变量无法进行常量初始化(例如需要动态初始化),则程序是**格式错误**(ill-formed)。原创 2024-10-24 00:15:00 · 953 阅读 · 0 评论 -
【C++ 20 新特性】C++20 中的 `using enum` 介绍
在 C++20 中,引入了 `using enum` 声明,这一特性简化了枚举类型中枚举值的使用,尤其是在作用域枚举(Scoped Enums)中。通过 `using enum`,可以将枚举中的所有枚举器(enumerators)引入到当前作用域,从而无需每次都使用作用域解析符 `::` 来访问它们。原创 2024-10-23 10:08:49 · 1144 阅读 · 0 评论 -
【C++17 新特性 std::byte】C++字节容器对比:std::vector<std::byte> vs std::vector<uint8_t> 全面解析
在C++编程中,`std::vector` 和 `std::vector` 是两种常用的字节容器,尽管它们在表面上看起来功能相似,但在底层原理和本质上存在显著差异。本章将深入探讨这两种容器的基本定义、内存表示及类型特性,以及语言设计和标准的考量,帮助开发者更好地理解它们之间的根本区别。原创 2024-10-22 17:15:01 · 928 阅读 · 0 评论 -
【C++ 20 新特性】深入探索 C++20 std::source_location:从日志到性能调优的全面指南
在现代软件开发中,特别是在调试、日志记录和测试场景中,开发者经常需要获取代码的上下文信息,例如调用文件的路径、行号、函数名等。传统上,C++ 提供了几种宏工具来实现这些功能,比如 `__FILE__` 和 `__LINE__`,但这些工具存在局限性。C++20 中引入的 `std::source_location` 类,为开发者提供了更优雅的解决方案,提升了代码的可读性、可维护性,并避免了宏展开带来的问题。原创 2024-09-28 21:14:51 · 1840 阅读 · 0 评论 -
【C++20 新特性 】深入解读C++20设计器语法:提升结构体初始化的灵活性与可读性
设计器语法允许开发者在初始化结构体或联合体时,指定具体的成员名称进行赋值,而不再依赖于成员的声明顺序。这种语法在 C++20 之前并不存在,因此在处理复杂结构体时,开发者不得不严格按照成员定义的顺序进行初始化,这增加了出错的可能性,尤其是在有多个成员的情况下。原创 2024-08-30 13:58:55 · 1359 阅读 · 0 评论 -
【C++ 17 新特性 】深入解析std::void_t:增强C++泛型编程的强大工具
在现代C++编程中,泛型编程(Generic Programming)已经成为一种非常重要的编程范式。通过模板(Templates),C++允许开发者编写能够处理不同数据类型的通用代码,而无需重复代码逻辑。随着C++标准的演进,泛型编程的能力和表达力得到了极大的增强,其中一个关键的工具就是`std::void_t`。它在C++14引入,并在C++17中正式标准化。`std::void_t`为模板元编程提供了一种简单而强大的机制,尤其是在SFINAE(Substitution Failure Is Not A原创 2024-08-28 21:32:07 · 1436 阅读 · 0 评论 -
【C++ 20 Ranges 】范围库的优势以及应用场景
范围库(Ranges Library)通过提供更现代化和灵活的方式来处理集合操作,能够显著减少中间对象的创建和不必要的拷贝。为了更好地理解这一点,我们可以通过一个具体的例子来说明。原创 2024-08-10 00:15:00 · 936 阅读 · 0 评论 -
【C++ 20 】C++20中constexpr的增强
C++20 对 `constexpr` 的扩展是其一大亮点,使得更多的代码可以在编译期进行计算,进而减少运行时的开销。以下是一些具体的扩展和改进:原创 2024-08-10 00:00:00 · 1790 阅读 · 0 评论 -
【C++ 20 概念的应用】探索 C++20 Concepts:类型安全的模板编程指南
在现代 C++ 开发中,Concepts 是一种用于指定和检查模板参数约束的强大工具,它可以增强代码的可读性、健壮性和错误消息的清晰度。本章将深入探讨 Concepts 的基本理念和语法,为后续更复杂的概念打下基础。原创 2024-08-08 19:28:39 · 718 阅读 · 0 评论 -
C++ 23新特性: 错误机制的新纪元
在 C++23 中,引入了 `std::expected` 类型,提供了一种结合了异常和错误码优点的错误处理方式。这种方式旨在通过在函数的返回类型中直接表达错误的可能性来增强代码的可读性,使错误处理更加明显且易于管理。原创 2024-06-09 23:44:38 · 1229 阅读 · 0 评论 -
C++20 新特性: 三向比较运算符
C++20 引入了一种新的比较运算符,称为“三向比较运算符”或“太空船运算符”,其符号为 ``。这个运算符提供了一种简化方式来同时比较两个值的相等性、小于和大于状态。这一特性主要旨在简化代码并改善性能,通过一次操作就能得到完整的比较结果。原创 2024-06-09 12:47:21 · 1677 阅读 · 0 评论 -
C++20 新特性: `std::bind_front` 和 `std::bind_back` 实现参数的完美转发
在理解了完美转发的基础知识后,我们可以进一步探讨如何使用 C++20 引入的 `std::bind_front` 和 C++23 引入的 `std::bind_back` 来实现参数的完美转发。这两个函数模板提供了一种便捷的方式来绑定部分函数参数,并生成一个新的可调用对象,该对象将保留原始参数的值类别(左值或右值)。原创 2024-06-09 12:45:50 · 563 阅读 · 0 评论 -
C++20 新特性:std::jthread线程新纪元
一直以来,我们在使用 `std::thread` 时,需要手动管理线程的 `join()` 或 `detach()`,并且不能直接支持外部请求的中止,这带来了额外的性能开销和编程复杂性。根据 C++ 长期以来的零开销设计哲学,C++20 引入了 `std::jthread` 和 `std::stop_token`。这些新特性不仅自动处理线程的加入,还支持协作式的线程取消,极大简化了线程的使用和管理,而不增加任何未使用功能的成本。让我们深入了解一下它们的使用和设计哲学。原创 2024-06-08 22:43:38 · 1539 阅读 · 0 评论 -
【C++20 新特性 Calendar (C++20) − Time zone (C++20)】时间的艺术与科学: C++中的现代日期和时区处理
在探索时间的流逝和管理中,C++11标准的引入标志着一个新时代的开始。通过引入``库,C++为开发者提供了一种强大而灵活的方式来处理时间和日期。``库不仅为时间度量提供了高精度的工具,而且通过其设计哲学,反映了对时间不可逆转性和连续性的深刻理解。正如心理学家威廉·詹姆斯在《心理学原理》中所述:“时间是我们最不可抗拒的连续体,是我们经验的背景。”通过将时间点(time points)、持续时间(durations)以及时钟(clocks)的概念引入编程世界,C++11使开发者能原创 2024-03-15 13:17:49 · 1787 阅读 · 4 评论 -
【C++ 20 新特性 算法和迭代器库的扩展和泛化 Ranges】深入浅出C++ Ranges库 (Exploring the C++ Ranges Library)
C++ Ranges库是C++20标准的一部分,它为C++标准库引入了一种新的范式,旨在提供更现代、更安全、更高效的方式来处理序列和算法。Ranges库通过引入范围(ranges)、视图(views)、适配器(adaptors)等概念,使得对序列的操作更加灵活和表达力更强。在传统的C++中,操作序列通常涉及迭代器(iterators)和算法(algorithms),这种方式虽然强大,但往往代码冗长且容易出错。Ranges库的出现,正是为了解决这些问题,它将迭代器和算法的操作抽象成更高层次的范围操作,使得原创 2024-03-11 00:15:00 · 1486 阅读 · 0 评论 -
【C++ 14 新特性 std::integer_sequence 】了解 std::integer_sequence 的使用
`std::integer_sequence`,自 C++14 起引入,作为模板元编程中的一员,主要用于生成编译时的整数序列。它本身并不存储任何数据,而是代表了一种类型,这种类型描述了一系列整数。正如哲学家亚里士多德在《形而上学》中所言:“本质先于存在。” `std::integer_sequence` 的价值在于其对整数序列的抽象和表征,而非其具体数值。原创 2024-01-24 00:08:30 · 1213 阅读 · 0 评论 -
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
折叠表达式主要用于处理模板参数包。当你有一个变参模板函数或类,并且需要对所有参数执行某种操作时,折叠表达式是理想的选择。原创 2024-01-22 00:08:55 · 1853 阅读 · 0 评论 -
【C++ 17 新特性 结构化绑定】深入理解C++ 17 结构化绑定[key, value] 的处理
在探索结构化绑定(Structured Bindings)的世界之前,让我们先沉思一下计算机科学家Edsger W. Dijkstra的名言:“简单性是成功的关键。” C++17标准引入的结构化绑定,正是这一理念的体现,它为我们提供了一种更简单、更直观的方式来操作复合数据类型。原创 2024-01-21 15:53:13 · 1513 阅读 · 0 评论 -
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
欢迎来到这篇关于C++20新特性的探索之旅。在这一章节中,我们将为您揭开C++20中引入的一项革命性功能的面纱:模板参数包展开与Lambda初始化捕获。这不仅是一次技术的革新,更是对编程哲学的一次深刻体现,它将引领我们走向更高效、更精准的编程世界。原创 2024-01-20 00:55:00 · 1410 阅读 · 1 评论 -
【C++ 17 新特性 互斥锁】std::scoped_lock 的使用,管理多个互斥量
C++ 并发支持库中的 `std::scoped_lock` 自 C++17 起被定义在 `` 头文件中。它是一个模板类,用于管理互斥量,提供了一种便利的 RAII(资源获取即初始化)风格的机制,用于在作用域块内拥有零个或多个互斥量。原创 2024-01-19 00:00:00 · 2407 阅读 · 0 评论 -
【C++ 23新特性 并发支持库 <stdatomic.h>】 C++23 新的 原子操作 头文件 <stdatomic.h>以及 _Atomic 宏
我们建议在C ++标准中添加一个头文件stdatomic.h。这将反映同名C头文件,并提供类似的功能。原创 2024-01-17 23:09:45 · 1175 阅读 · 0 评论 -
【C++ 17 新特性 weak_from_this】C++ 获取自身指针对象std::enable_shared_from_this下的shared_from_this和weak_from_this
`shared_from_this` 是 C++11 中引入的一个功能,它是在 `std::enable_shared_from_this` 类的帮助下实现的。当你有一个类,该类的对象通常通过 `std::shared_ptr` 管理时,`shared_from_this` 可以安全地生成这些对象的更多 `std::shared_ptr` 实例。原创 2024-01-17 00:01:57 · 1331 阅读 · 1 评论 -
【C++ 20新特性 原子操作】 C++20 std::atomic_signed_lock_free 和 std::atomic_unsigned_lock_free的作用
在 C++20 中,`std` 命名空间中引入了两个新的 typedef:`atomic_signed_lock_free` 和 `atomic_unsigned_lock_free`。这些是原子类型的特殊别名,它们的引入是该语言持续努力为更强大和高效的并发编程能力提供支持的一部分。原创 2024-01-17 00:15:00 · 1028 阅读 · 0 评论 -
【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
C++作为一门历史悠久的编程语言,自其诞生以来就不断发展和完善。每一次标准的更新,都是对开发者需求的响应,同时也反映了技术社区对于语言特性的共识。正如心理学家Carl Rogers所说:“我们不能改变,除非我们接受”。这句话在C++的发展中同样适用,语言的每一次改进都是基于对现状的接受和对未来的设想。原创 2024-01-12 00:35:22 · 2193 阅读 · 2 评论 -
【C++ std::variant】深入探索 C++ std::variant:构造方法与实践应用
`std::variant`,或称标准变体,是 C++17 标准库引入的一种类型,用于安全地存储并访问多种类型中的一种。此特性在编程中的引入,反映了人们对灵活性和效率的追求,这正符合心理学中对人类追求效率和适应性的观点。原创 2024-01-09 19:56:04 · 1402 阅读 · 0 评论 -
介绍GCC8 中少数几个能用的C++20 特性
虽然GCC8开始支持C++20,但是大部分有用的功能集中在9-11,少数在12(比如Atomic std::shared_ptr and std::weak_ptr和Extending std::make_shared() to support arrays)和13(比如Text formatting和)原创 2023-12-17 12:53:46 · 1459 阅读 · 0 评论 -
C++ 17 新特性 C++ String View:了解C++ 17 std::string_view的使用场景
# 第一章: 引言:字符串处理在C++中的重要性在探索编程语言的世界中,字符串处理无疑是其中最为核心和频繁的任务之一。在C++中,字符串不仅是信息交流的基础,也是程序逻辑和数据处理的关键组成部分。就像在现实生活中,我们用语言来表达想法和感受,程序中的字符串则是表达和储存数据的基本方式。## 1.1 字符串在编程中的角色字符串原创 2023-12-17 12:28:47 · 1290 阅读 · 0 评论 -
C++ 14 17 新特性:[[fallthrough]], [[nodiscard]], [[maybe_unused]], 和 [[deprecated]] 新属性的使用...
1. `[[fallthrough]]` 属性:这个属性用于在`switch`语句中。通常,当`switch`语句的一个`case`执行完毕后,会自动跳转到`switch`语句的末尾,除非存在`break`语句。如果你想要故意从一个`case`“落入”(fall through)到下一个`case`,可以使用`[[fallthrough]]`属性来告诉编译器这是故意的行为,以避免编译器发出警告。2. `[[nodiscard]]` 属性:这个属性可以用于函数或者返回类型。它的作用是告诉编译器:调用这个函原创 2023-12-17 00:48:15 · 2006 阅读 · 0 评论 -
【C++ 20 新特性】参数包初始化捕获的魅力 (“pack init-capture“ in C++20: A Deep Dive)
在C++20之前,参数包在lambda表达式中的捕获是一个棘手的问题。但是,"pack init-capture"的引入为我们提供了一个简洁而直观的方式来捕获参数包,这大大简化了代码并提高了效率。原创 2023-09-18 13:09:43 · 307 阅读 · 0 评论 -
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
C++17 是一个标准化的 C++ 语言版本,该版本引入了许多新特性,旨在简化编程任务,提高代码效率,并增强类型安全。从 `std::optional`(可选值)到 `std::filesystem`(文件系统操作),这些新特性都体现了现代 C++ 的设计理念:让复杂事物变得简单,而不是简单事物变得复杂。原创 2023-09-04 01:06:25 · 3842 阅读 · 1 评论 -
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
在编程世界中,文件和目录操作是不可或缺的一部分。无论你是在开发一个复杂的数据分析工具,还是一个简单的文本编辑器,你都需要与文件系统(Filesystem)进行交互。C++ Filesystem库提供了一种标准化和跨平台的方式来进行这些操作。原创 2023-09-09 00:15:00 · 1207 阅读 · 0 评论 -
【C++ 17 泛型容器对比】C++ 深度解析:std::any 与 std::variant 的细微差别
C++是一种静态类型(Static Typing)的语言。这意味着每个变量和对象在编译时都有一个明确的类型,编译器会对类型进行检查以确保它们的正确使用。好比说,我们不能将一个字符串(std::string)赋值给一个整数(int)变量。原创 2023-08-26 00:15:00 · 2315 阅读 · 2 评论 -
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
C++14是C++编程语言的一个重要里程碑,它引入了许多新特性,以增强程序员的生产力和代码的可维护性。其中,透明操作符Functors(透明操作符函数对象)是一个引人注目的特性。原创 2023-08-13 00:30:00 · 526 阅读 · 0 评论 -
【 C++14 新特性 加强版 constexpr】深入探索 C++14 中的 constexpr
在探索 C++ 的深层次特性时,我们不仅仅是在学习编程语言的技术细节,更是在探索编程背后的人性。正如心理学家 Carl Rogers 所说:“我们不能改变、我们不能摆脱我们的自然状态 - 我们只能满足它、理解它、超越它。” 在编程中,我们也是如此。我们不能改变编程的本质,但我们可以通过深入理解来掌握它。原创 2023-08-13 00:15:00 · 760 阅读 · 0 评论 -
【C++ 17 新特性 std::variant】C++ std::variant 的 深入探讨
`std::variant` 是C++17引入的一个模板类,它可以存储多种不同类型的值,但在任何时候只能存储其中一种类型的值。从心理学的角度来看,人们总是希望有更多的选择,但同时又不希望被过多的选择所困扰。这就是为什么我们需要一个可以存储多种类型但又只存储一种的工具。原创 2023-08-12 00:15:00 · 477 阅读 · 0 评论 -
【C++20概念】编译时多态性的力量
在C++20中,引入了一个新的特性,称为“概念”(Concepts)。概念是一种在编译时检查模板参数类型的工具,它可以帮助我们在编写模板代码时提供更强的类型检查,从而避免在实例化模板时出现类型错误。在C++20之前,模板编程(Template Programming)主要依赖于模板特化(Template Specialization)和SFINAE(Substitution Failure Is Not An Error,替换失败不是错误)来处理类型问题。然而,这些技术在处理复杂的类型问题时,往往会导致原创 2023-08-02 00:15:00 · 309 阅读 · 0 评论 -
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
C++20 Concepts(概念)是C++20标准中引入的一项重要特性,它的目的是为了改进模板编程。在C++20之前,模板编程虽然强大,但也存在一些问题。例如,当模板参数不满足模板的预期时,编译器产生的错误信息通常难以理解。此外,模板的使用者往往需要查看模板的实现才能知道模板参数应满足的条件,这使得模板的使用变得困难。原创 2023-08-02 00:15:00 · 346 阅读 · 0 评论