C++ 新特性
文章平均质量分 96
介绍C++ 14 17 20 特性
泡沫o0
目前 主要从事C++开发,兴趣在于不断学习和探索新知识,这也是我职业生涯中不断前进的动力。
通过我的博客,我希望与大家分享这一过程中所获得的知识和经验。
技术是一片深不可测的海洋,每一次深入学习都是对未知领域的探索和对自我能力的挑战。
在这个广阔的知识领域中,我们都是探险者,渴望揭开更多的奥秘,追求技术的极致。
展开
-
【C++20 新特性 】深入解读C++20设计器语法:提升结构体初始化的灵活性与可读性
设计器语法允许开发者在初始化结构体或联合体时,指定具体的成员名称进行赋值,而不再依赖于成员的声明顺序。这种语法在 C++20 之前并不存在,因此在处理复杂结构体时,开发者不得不严格按照成员定义的顺序进行初始化,这增加了出错的可能性,尤其是在有多个成员的情况下。原创 2024-08-30 13:58:55 · 1038 阅读 · 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 · 989 阅读 · 0 评论 -
【C++ 20 Ranges 】范围库的优势以及应用场景
范围库(Ranges Library)通过提供更现代化和灵活的方式来处理集合操作,能够显著减少中间对象的创建和不必要的拷贝。为了更好地理解这一点,我们可以通过一个具体的例子来说明。原创 2024-08-10 00:15:00 · 785 阅读 · 0 评论 -
【C++ 20 】C++20中constexpr的增强
C++20 对 `constexpr` 的扩展是其一大亮点,使得更多的代码可以在编译期进行计算,进而减少运行时的开销。以下是一些具体的扩展和改进:原创 2024-08-10 00:00:00 · 1563 阅读 · 0 评论 -
【C++ 20 概念的应用】探索 C++20 Concepts:类型安全的模板编程指南
在现代 C++ 开发中,Concepts 是一种用于指定和检查模板参数约束的强大工具,它可以增强代码的可读性、健壮性和错误消息的清晰度。本章将深入探讨 Concepts 的基本理念和语法,为后续更复杂的概念打下基础。原创 2024-08-08 19:28:39 · 625 阅读 · 0 评论 -
C++ 23新特性: 错误机制的新纪元
在 C++23 中,引入了 `std::expected` 类型,提供了一种结合了异常和错误码优点的错误处理方式。这种方式旨在通过在函数的返回类型中直接表达错误的可能性来增强代码的可读性,使错误处理更加明显且易于管理。原创 2024-06-09 23:44:38 · 1042 阅读 · 0 评论 -
C++20 新特性: 三向比较运算符
C++20 引入了一种新的比较运算符,称为“三向比较运算符”或“太空船运算符”,其符号为 ``。这个运算符提供了一种简化方式来同时比较两个值的相等性、小于和大于状态。这一特性主要旨在简化代码并改善性能,通过一次操作就能得到完整的比较结果。原创 2024-06-09 12:47:21 · 1368 阅读 · 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 · 382 阅读 · 0 评论 -
C++20 新特性:std::jthread线程新纪元
一直以来,我们在使用 `std::thread` 时,需要手动管理线程的 `join()` 或 `detach()`,并且不能直接支持外部请求的中止,这带来了额外的性能开销和编程复杂性。根据 C++ 长期以来的零开销设计哲学,C++20 引入了 `std::jthread` 和 `std::stop_token`。这些新特性不仅自动处理线程的加入,还支持协作式的线程取消,极大简化了线程的使用和管理,而不增加任何未使用功能的成本。让我们深入了解一下它们的使用和设计哲学。原创 2024-06-08 22:43:38 · 1180 阅读 · 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 · 1480 阅读 · 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 · 1290 阅读 · 0 评论 -
【C++ 14 新特性 std::integer_sequence 】了解 std::integer_sequence 的使用
`std::integer_sequence`,自 C++14 起引入,作为模板元编程中的一员,主要用于生成编译时的整数序列。它本身并不存储任何数据,而是代表了一种类型,这种类型描述了一系列整数。正如哲学家亚里士多德在《形而上学》中所言:“本质先于存在。” `std::integer_sequence` 的价值在于其对整数序列的抽象和表征,而非其具体数值。原创 2024-01-24 00:08:30 · 971 阅读 · 0 评论 -
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
折叠表达式主要用于处理模板参数包。当你有一个变参模板函数或类,并且需要对所有参数执行某种操作时,折叠表达式是理想的选择。原创 2024-01-22 00:08:55 · 1433 阅读 · 0 评论 -
【C++ 17 新特性 结构化绑定】深入理解C++ 17 结构化绑定[key, value] 的处理
在探索结构化绑定(Structured Bindings)的世界之前,让我们先沉思一下计算机科学家Edsger W. Dijkstra的名言:“简单性是成功的关键。” C++17标准引入的结构化绑定,正是这一理念的体现,它为我们提供了一种更简单、更直观的方式来操作复合数据类型。原创 2024-01-21 15:53:13 · 1314 阅读 · 0 评论 -
【C++20 新特性 】模板参数包展开与Lambda初始化捕获详解
欢迎来到这篇关于C++20新特性的探索之旅。在这一章节中,我们将为您揭开C++20中引入的一项革命性功能的面纱:模板参数包展开与Lambda初始化捕获。这不仅是一次技术的革新,更是对编程哲学的一次深刻体现,它将引领我们走向更高效、更精准的编程世界。原创 2024-01-20 00:55:00 · 1095 阅读 · 0 评论 -
【C++ 17 新特性 互斥锁】std::scoped_lock 的使用,管理多个互斥量
C++ 并发支持库中的 `std::scoped_lock` 自 C++17 起被定义在 `` 头文件中。它是一个模板类,用于管理互斥量,提供了一种便利的 RAII(资源获取即初始化)风格的机制,用于在作用域块内拥有零个或多个互斥量。原创 2024-01-19 00:00:00 · 1851 阅读 · 0 评论 -
【C++ 23新特性 并发支持库 <stdatomic.h>】 C++23 新的 原子操作 头文件 <stdatomic.h>以及 _Atomic 宏
我们建议在C ++标准中添加一个头文件stdatomic.h。这将反映同名C头文件,并提供类似的功能。原创 2024-01-17 23:09:45 · 1025 阅读 · 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 · 1023 阅读 · 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 · 949 阅读 · 0 评论 -
【C++标准的演化】逐步解决历史遗留问题,从C++11到C++26的改进
C++作为一门历史悠久的编程语言,自其诞生以来就不断发展和完善。每一次标准的更新,都是对开发者需求的响应,同时也反映了技术社区对于语言特性的共识。正如心理学家Carl Rogers所说:“我们不能改变,除非我们接受”。这句话在C++的发展中同样适用,语言的每一次改进都是基于对现状的接受和对未来的设想。原创 2024-01-12 00:35:22 · 1576 阅读 · 2 评论 -
【C++ std::variant】深入探索 C++ std::variant:构造方法与实践应用
`std::variant`,或称标准变体,是 C++17 标准库引入的一种类型,用于安全地存储并访问多种类型中的一种。此特性在编程中的引入,反映了人们对灵活性和效率的追求,这正符合心理学中对人类追求效率和适应性的观点。原创 2024-01-09 19:56:04 · 1123 阅读 · 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 · 1185 阅读 · 0 评论 -
C++ 17 新特性 C++ String View:了解C++ 17 std::string_view的使用场景
# 第一章: 引言:字符串处理在C++中的重要性在探索编程语言的世界中,字符串处理无疑是其中最为核心和频繁的任务之一。在C++中,字符串不仅是信息交流的基础,也是程序逻辑和数据处理的关键组成部分。就像在现实生活中,我们用语言来表达想法和感受,程序中的字符串则是表达和储存数据的基本方式。## 1.1 字符串在编程中的角色字符串原创 2023-12-17 12:28:47 · 1037 阅读 · 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 · 1552 阅读 · 0 评论 -
【C++ 20 新特性】参数包初始化捕获的魅力 (“pack init-capture“ in C++20: A Deep Dive)
在C++20之前,参数包在lambda表达式中的捕获是一个棘手的问题。但是,"pack init-capture"的引入为我们提供了一个简洁而直观的方式来捕获参数包,这大大简化了代码并提高了效率。原创 2023-09-18 13:09:43 · 191 阅读 · 0 评论 -
【C++ 17 新功能 std::visit 】深入解析 C++17 中的 std::visit:从原理到实践
C++17 是一个标准化的 C++ 语言版本,该版本引入了许多新特性,旨在简化编程任务,提高代码效率,并增强类型安全。从 `std::optional`(可选值)到 `std::filesystem`(文件系统操作),这些新特性都体现了现代 C++ 的设计理念:让复杂事物变得简单,而不是简单事物变得复杂。原创 2023-09-04 01:06:25 · 2605 阅读 · 1 评论 -
【C++ 17 新特性 文件管理】探索C++ Filesystem库:文件和目录操作的全面指南
在编程世界中,文件和目录操作是不可或缺的一部分。无论你是在开发一个复杂的数据分析工具,还是一个简单的文本编辑器,你都需要与文件系统(Filesystem)进行交互。C++ Filesystem库提供了一种标准化和跨平台的方式来进行这些操作。原创 2023-09-09 00:15:00 · 933 阅读 · 0 评论 -
【C++ 17 泛型容器对比】C++ 深度解析:std::any 与 std::variant 的细微差别
C++是一种静态类型(Static Typing)的语言。这意味着每个变量和对象在编译时都有一个明确的类型,编译器会对类型进行检查以确保它们的正确使用。好比说,我们不能将一个字符串(std::string)赋值给一个整数(int)变量。原创 2023-08-26 00:15:00 · 1355 阅读 · 2 评论 -
【C++14 新特性 透明操作符】透视C++14透明操作符Functors:深入理解与实践
C++14是C++编程语言的一个重要里程碑,它引入了许多新特性,以增强程序员的生产力和代码的可维护性。其中,透明操作符Functors(透明操作符函数对象)是一个引人注目的特性。原创 2023-08-13 00:30:00 · 275 阅读 · 0 评论 -
【 C++14 新特性 加强版 constexpr】深入探索 C++14 中的 constexpr
在探索 C++ 的深层次特性时,我们不仅仅是在学习编程语言的技术细节,更是在探索编程背后的人性。正如心理学家 Carl Rogers 所说:“我们不能改变、我们不能摆脱我们的自然状态 - 我们只能满足它、理解它、超越它。” 在编程中,我们也是如此。我们不能改变编程的本质,但我们可以通过深入理解来掌握它。原创 2023-08-13 00:15:00 · 550 阅读 · 0 评论 -
【C++ 17 新特性 std::variant】C++ std::variant 的 深入探讨
`std::variant` 是C++17引入的一个模板类,它可以存储多种不同类型的值,但在任何时候只能存储其中一种类型的值。从心理学的角度来看,人们总是希望有更多的选择,但同时又不希望被过多的选择所困扰。这就是为什么我们需要一个可以存储多种类型但又只存储一种的工具。原创 2023-08-12 00:15:00 · 318 阅读 · 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 · 209 阅读 · 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 · 247 阅读 · 0 评论 -
【C++ 17 包裹器类 std::optional】“深入理解C++:std::optional的高级应用与原理
# 第七章:std::optional的未来发展## 7.1 C++20中std::optional的改进在C++20中,std::optional并没有显著的改进,但是,它的使用场景和应用范围在不断扩大。在C++20中,我们可以看到更多的库函数开始返回std::optional,这是因为std::optional提供了一种原创 2023-07-24 11:12:34 · 396 阅读 · 0 评论 -
【C++ 20 并发工具 std::barrier】掌握并发编程:深入理解C++的std::barrier
在C++20中,std::barrier(屏障)已经成为了并发编程的重要工具。然而,C++的发展从未停止过,我们可以预期在未来的C++版本中,std::barrier可能会有一些改进。原创 2023-07-21 14:26:34 · 1733 阅读 · 0 评论 -
【C++ 17 包裹类 泛型容器 std::any】深入理解与应用C++ std::any:从泛型编程到多态设计
std::any是一个类型安全的容器,可以存储任何类型的值,这使得它能够在一定程度上实现多态行为。这种多态性是通过封装不同类型的对象到一个统一的接口(即std::any)来实现的,因此,你可以说std::any是一种封装。然而,需要注意的是,std::any提供的多态性与传统的面向对象多态性(如虚函数)是不同的。std::any的多态性更多的是一种类型的多态性,它允许你在运行时处理不同类型的对象,但是你不能通过std::any直接调用存储对象的方法。原创 2023-07-20 14:55:15 · 782 阅读 · 0 评论 -
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
std::counting_semaphore是C++20标准库中的一个类模板,它实现了一个计数信号量。信号量是一种同步原语,用于控制对共享资源的并发访问,或者在多个线程之间进行同步。原创 2023-07-19 23:40:26 · 2431 阅读 · 0 评论 -
【C++ 内存管理 重载new/delete 运算符 新特性】深入探索C++14 新的/删除的省略(new/delete elision)的原理与应用
在C++中,你可以重载 operator delete。重载 operator delete 允许你自定义对象在被删除时如何回收内存。这在你需要对内存管理进行精细控制的情况下非常有用,例如在实现自定义内存分配器或者处理特殊的硬件资源时。然而,问题在于 operator delete 不是虚函数,也不存储在虚函数表中。这意味着当你删除一个指向派生类对象的基类指针时,编译器默认会调用基类的 operator delete,而不是派生类的 operator delete。这可能会导致错误的内存回收行为。原创 2023-07-10 13:48:39 · 565 阅读 · 0 评论 -
【C++ 17 新特性 】拥抱现代C++:深入C++17特性以获得更高效、更安全的代码
C++17是C++编程语言的一个重要版本,于2017年12月正式发布。它在C++11和C++14的基础上继续完善和扩展C++语言特性和标准库组件。C++17的主要目标是进一步提高C++程序的性能、可用性和安全性,同时引入一些新的编程范式,使C++编程更加现代化和高效。C++17包含许多新特性,如`if constexpr`、`structured bindings`、`constexpr lambda`等,以及标准库的扩展,如`std::optional`、`std::variant`、`std::f原创 2023-04-14 10:52:07 · 2012 阅读 · 0 评论 -
【C++ 泛型编程 C++14 新特性】理解C++14变量模板的魅力与应用
在C++14之前,我们可以使用模板来定义类型和函数,但是对于变量,我们只能在模板类或模板函数中定义它们。这在某些情况下可能会导致代码的冗余和复杂性。例如,如果我们想为每种类型定义一个常量,我们可能需要定义一个模板类,然后在这个类中定义这个常量。这不仅使代码变得冗余,而且也使得使用这个常量变得不直观。为了解决这个问题,C++14引入了变量模板。变量模板允许我们直接定义模板变量,而不需要包装在模板类或模板函数中。这使得我们可以更加直观和简洁地定义和使用模板变量。变量模板的引入,极大地提高了C++的表达能原创 2023-07-10 12:55:01 · 418 阅读 · 0 评论