首页
文章列表
标签墙
返回找工具啦
C++17
共 15 篇文章
C++ std::variant的visitor模式与模式匹配实现
2026-06-14 21:39:26
C++ std::variant的visitor模式与模式匹配实现 std::variant是C++17引入的一种安全、可辨识的联合体,用于在固定类型集合中存储其中一个值。与传统的union相比,它更安全,且能自动管理生命周期。然而,要处理其内部存储的具体类型,就需要“访问”机制。本文将手把手教你从
C++17
std::variant
visitor模式
64
0
C++ std::optional的构造函数为什么没有explicit导致隐式转换陷阱
2026-06-03 00:50:26
C++ std::optional的构造函数为什么没有explicit导致隐式转换陷阱 在使用C++17引入的 std::optional 时,一个不显眼的设计细节可能埋下隐患:它的构造函数没有声明为 explicit。这看似方便了日常编码,却可能引发一系列令人困惑的隐式转换陷阱,导致程序出现难以察
C++std::optional
隐式转换陷阱
构造函数
68
0
C++ std::optional 的空状态表示为什么比 std::pair 更语义化
2026-05-28 10:18:48
C++ std::optional 的空状态表示为什么比 std::pair 更语义化 在 C++ 中,表示一个函数可能返回“有效值”或“空值”是常见需求。传统做法使用 std::pair<bool, T,但 C++17 引入的 std::optional<T 提供了更清晰、更安全的替代方案。本文从
C++17
std::optional
语义化
81
0
C++ std::filesystem遍历目录与文件操作的跨平台方案
2026-05-19 09:23:28
C++ std::filesystem遍历目录与文件操作的跨平台方案 在C++17之前,处理文件路径、遍历目录或进行跨平台文件操作往往需要依赖操作系统特定的API或第三方库。C++17引入的 std::filesystem 库彻底改变了这一局面,它提供了一个标准化、跨平台(Windows、Linux
C++17
std::filesystem
跨平台
141
0
C++ std::optional的比较操作符与std::nullopt的比较
2026-05-06 09:14:05
C++ std::optional的比较操作符与std::nullopt的比较 C++17 引入了 std::optional,用于处理可能不存在的值。理解其比较操作符的行为,特别是与 std::nullopt 的交互,是写出健壮代码的关键。 1. 理解核心比较逻辑 std::optional 的比
C++
C++17
optional类型
93
0
C++ std::scoped_lock同时锁定多个互斥量避免死锁
2026-05-04 14:29:00
C++ std::scopedlock同时锁定多个互斥量避免死锁 在多线程编程中,当需要同时操作多个共享资源时,如果锁的顺序不一致,极易发生死锁。死锁会导致程序挂起,无法继续执行。C++17 引入了 std::scopedlock,这是一个专门为了解决多锁死锁问题而设计的工具。它不仅能一次性锁定多个
C++编程
多线程
死锁
105
0
C++ std::visit结合std::variant的多态访问模式
2026-05-04 13:22:09
C++ std::visit结合std::variant的多态访问模式 在现代 C++(C++17 及以上)开发中,std::variant 提供了一种类型安全的联合体,而 std::visit 则是访问这个联合体中数据的钥匙。这种组合被称为“静态多态”,它相比传统的基于继承和虚函数的“动态多态”,
C++
C++17
variant
110
0
C++ std::variant的valueless_by_exception状态处理
2026-05-03 04:17:09
C++ std::variant的valuelessbyexception状态处理 std::variant 是 C++17 引入的类型安全联合体。它通常用来存储多种类型中的任意一种,但在极少数异常情况下,它会进入一个特殊的“无效”状态,即 valuelessbyexception。如果不处理这种状
C++编程
std::variant
异常处理
92
0
C++ std::string_view为什么比string更适合做函数参数
2026-05-02 13:23:23
C++ std::stringview为什么比string更适合做函数参数 在C++开发中,处理文本数据是一项极其频繁的任务。许多开发者在编写函数接收字符串参数时,习惯性地使用 std::string 或 const std::string&。然而,自C++17引入 std::stringview
C++编程
性能优化
字符串处理
112
0
C++ std::variant的std::get_if安全访问与异常版本对比
2026-04-30 20:13:49
C++ std::variant的std::getif安全访问与异常版本对比 std::variant 是 C++17 引入的类型安全的联合体,它能在同一时刻存储多种类型中的一种。在实际开发中,我们经常需要将存储的值提取出来。C++ 标准库主要提供了两种方式:std::get(基于异常)和 std:
C++
C++17
variant
127
0
C++ std::optional::value_or与value的异常抛出行为
2026-04-27 20:20:56
C++ std::optional::valueor与value的异常抛出行为 在 C++17 引入 std::optional 后,处理可能不存在的值变得更加安全。然而,不当使用获取值的方法会导致程序崩溃或逻辑错误。本文直接对比 value 和 valueor 的核心区别,并演示如何在不同的代码场
C++
C++17
标准库
113
0
C++ std::variant的std::monostate作为默认无值状态
2026-04-26 05:14:59
C++ std::variant的std::monostate作为默认无值状态 C++17 引入了 std::variant,作为类型安全的 union 替代品。然而,与可以指向 nullptr 的指针或具有 std::nullopt 的 std::optional 不同,std::variant
C++
C++17
stdvariant
106
0
C++ std::variant的std::visit访问者模式实现
2026-04-23 15:17:30
C++ std::variant的std::visit访问者模式实现 std::variant是C++17引入的类型安全联合类型替代方案,它允许在同一个对象中存储不同类型的数据。访问者模式是一种设计模式,允许在不修改原有类结构的情况下添加新操作。将std::variant与std::visit结合使
C++17
std::variant
访问者模式
101
0
C++ std::variant的std::holds_alternative类型检查
2026-04-19 08:19:00
std::variant 是 C++17 标准库中提供的一个类型安全的联合体容器,它能在同一时刻存储多种指定类型中的某一种。在使用该容器时,经常需要判断当前存储的具体数据类型,std::holdsalternative 就是专门用于执行此操作的函数。 1. 引入 必要的头文件 在使用前,确保 代码文
C++
C++17
variant
122
0
C++ 标准库:不同标准版本的兼容性
2026-04-03 10:21:14
C++ 标准库:不同标准版本的兼容性 C++ 语言自诞生以来经历了多次标准化更新,每次新标准(如 C++11、C++14、C++17、C++20 等)都引入了新特性、改进或废弃旧功能。这些变化直接影响标准库的行为和接口。如果你在多个项目中使用不同编译器或需支持旧系统,理解各标准版本间的兼容性至关重要
C++标准库
版本兼容性
C++11
141
0