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

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 -
2026-05-26
C++
#C++

C++ 结构化绑定

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

C++ std::initializer_list

std::initializer_list 是 C++11 引入的语法糖与核心库设施的桥梁,它让统一初始化(Uniform Initialization)成为可能,理解其只读代理的本质和生命周期限制,是编写现代 C++ 库的关键。 一、核心本质std::initializer_list 是 C++11 引入的轻量级模板类,用于表示同类型对象的数组视图。其主要目的是支持列表初始化语法(使用花括号
2026-05-24
C++ > 语言特性 > C++11
#C++ #模板 #C++11

C++ std::integral_constant 在模板元编程中的应用

一、模板元编程模板元编程(Template Metaprogramming)是一种 C++ 编程技术,其主要手段是利用模板来实现在编译时执行计算。这种方法的优点是,通过在编译阶段完成部分工作,可以提高运行时的效率。 在模板元编程中,我们常常使用类型(type)来表示值(value),并通过模板特化或者模板函数的重载来实现不同的操作。 比如说,我们可以定义一个模板类 Factorial<3&
2026-05-23
C++ > 模板
#C++ #模板

C++ constexpr、consteval、constinit

标准版本 特点 C++11 引入 constexpr 变量和函数;函数体限单条 return 语句 C++14 放宽 constexpr 函数限制:允许局部变量、多个 return、循环等 C++17 引入 if constexpr;constexpr static 成员变量可内联初始化;允许 constexpr Lambda C++20 允许 constexpr 虚函数、
2026-05-22
C++ > 语言特性 > C++17
#C++ #C++11

C++ STL中的 iterator_traits

一、基本概念iterator_traits 是 C++ 标准库中的一个模板类,位于 <iterator> 头文件中。它的主要作用是为迭代器提供统一的接口,允许算法以一致的方式访问迭代器的相关类型信息,而不用关心迭代器的具体类型。 在 STL 标准库提供的算法一般有以下特征: 参数一般包括 iterator 要根据 iterator 的种类,和 iterator 包装的元素的类型等信息
2026-05-21
C++ > 模板
#C++ #模板 #STL

C++标签派发(Tag Dispatching)

标签派发是在 C++ 20 引入 concept 之前模板编程的一个手段:由于 C++ 不支持函数模板的偏特化,所以为例实现偏特化而产生的一个技巧 一、引入一般重载函数的设计是根据不同的参数决定具体做什么事情,编译器会根据参数匹配的原则确定正确的重载版本。但是对于函数模板,其参数类 型是泛化的模板参数,此时又如何让编译器选择我们希望的那个函数模板的实例呢? 提供特化版本是一个方法,但是如果需要
2026-05-20
C++ > 模板
#C++ #模板
1234…13

搜索

Hexo Fluid