Yuxxxxxxxxxx's Blog
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

C++ std::nullopt

一、基本概念 简单来说,std::nullopt 是一个哨兵值(Sentinel Value),专门用来表示 std::optional 处于**“无值”(空)的状态**。 在底层,std::nullopt 的定义非常简单: 它的类型是 std::nullopt_t(一个空的强类型结构体)。 std::nullopt 是 std::nullopt_t 的一个 inline constexpr
2026-06-06
C++ > 语言特性 > C++17
#C++ #C++17

C++ std::any

一、基本概念 std::any 也是 C++17 引入的一个核心容器类。如果说 std::variant 是“类型安全的共用体(Union)”,那么 std::any 就是**“类型安全的 void\* 指针”**。 它能够存储任意类型的单个值,并且在运行时保留该值的类型信息,确保在取出数据时进行强类型检查。 在 C++17 之前,如果你需要一个可以接收“任何类型”的容器,通常只能用 void*
2026-06-05
C++ > 语言特性 > C++17
#C++ #C++17

C++ std::variant

一、基本概念 std::variant 是C++17引入的一个新的标准库类型,它提供了一种类型安全的联合体(Type-safe Union)。这个类可以在同一时间持有几种可能类型中的一个值。 相较于传统的 C 风格 union,std::variant 最大的优势是类型安全:它知道自己当前存的是什么类型,并在析构时正确调用对应类型的析构函数,不会发生内存泄漏或未定义行为。 std::varian
2026-06-03
C++ > 语言特性 > C++17
#C++ #C++17

C++ std::optional

一、基本概念 C++17 引入了 std::optional,表示一个可能有值的对象(没有值时就是默认的 std::nullopt)。它提供了一种类型安全的方式来表示可能存在也可能不存在的值。 在 std::optional 出现之前,我们通常使用魔术值(如 -1、nullptr、空字符串)或通过指针/引用参数来表达“无值”的概念。这些方法要么不安全,要么语义模糊。std::optional 完
2026-06-01
C++ > 语言特性 > C++17
#C++ #C++17

C++ 友元friend

在 C++ 中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。下面就来介绍一种例外情况——友元(friend)。借助友元,可以使得其它类中的成员函数以及全局范围内的函数访问当前类的 private 成员。 一、友元函数 在当前类以外定义的、不属于当前类的函数也可以在类中
2026-05-30
C++
#C++

C++ 运算符重载

在 C++ 中,自定义数据类型(如类、结构体)可以通过对运算符重载,实现像内置数据类型一样使用运算符(如 +、-、*、<< 等),从而增强代码的可读性和易用性。运算符重载本质上是函数重载,因此需遵循特定的语法和规则。 一、基本语法 运算符重载有两种形式:成员函数和非成员函数(全局函数)。 1.1 成员函数形式 123返回类型 operator 运算符(参数列表) {
2026-05-29
C++
#C++

C++ 类模板参数推导

在 C++17 之前,你必须在初始化变量时指定所有的模板参数,因为为了实例化类模板,所有的参数都必须是已知的,例如: 123std::pair<int, char const*> p{ 42, "demo" };std::vector<int> v{ 1, 2 };foo<int> f{ 42
2026-05-28
C++ > 语言特性 > C++17
#C++ #模板 #C++17

C++ 变长参数模板

一、什么是变长参数模板 C++11 中新增加了一项内容,叫做变长参数模板,所谓变参数模板,顾名思义就是参数个数和类型都可能发生变化的模板,要实现这一点,那就必须要使用模板形参包。 模板形参包是可以接受 0 个或者 n 个模板实参的模板形参,至少有一个模板形参包的模板就可以称作变长参数模板。因此,搞懂了模板形参包就明白变参数模板了,因为变参数模板就是基于模板形参包来实现的,接下来我们就来看看到底啥
2026-05-27
C++ > 语言特性 > C++11
#C++ #模板 #C++11

C++ ptrdiff_t

一、定义 ptrdiff_t 是 C/C++ 标准库中定义的一个与机器相关的数据类型。ptrdiff_t 类型变量通常用来保存两个指针减法操作的结果。ptrdiff_t 定义在 stddef.h(cstddef)这个文件内。ptrdiff_t 通常被定义为 long int 类型。 123#include <cstddef>ptrdiff_t diff = pointer1 - po
2026-05-26
C++
#C++

C++ 结构化绑定

在现代 C++(C17 及以后)中,**结构化绑定(Structured Bindings)**是一项革命性的语法特性。它极大地提升了代码的可读性,减少了样板代码,并让 C 在处理多返回值和复合数据结构时,拥有了媲美 Python、Go 等现代语言的优雅体验。 一、引入 在 C++17 之前,如果我们想从一个函数返回多个值,或者解构一个容器/结构体,通常有以下几种做法,但它们都各有痛点。 使用
2026-05-25
C++ > 语言特性 > C++17
#C++ #C++17
1234…14

搜索

Hexo Fluid