“……” 这种 C++ 语法已被标准弃用
去年,我在“What does the …… mean in C++?”一文中专门介绍过 …… 这种极其罕见的 C++ 语法,它其实是 …, … 的省略语法。以下这三种写法完全等价: … Continue Reading “……” 这种 C++ 语法已被标准弃用
Dive deep into the C++ core, and discover more!
去年,我在“What does the …… mean in C++?”一文中专门介绍过 …… 这种极其罕见的 C++ 语法,它其实是 …, … 的省略语法。以下这三种写法完全等价: … Continue Reading “……” 这种 C++ 语法已被标准弃用
C++17 存在一个不起眼的类型 std::monostate,引入背景是 std::variant 需要允许默认构造,而如果它所有的候选类型都不支持默认构造,那就可以将 std::monostate… Continue Reading std::monostate ≠ “空”类型
std::projected 是 C++20 引入的一个模板工具,用于获取应用投影函数后迭代器所指向的值类型。例如: struct Person { std::string name; int age… Continue Reading C++26 Finally Makes std::projected ADL-Proof
在 TBOMC++ (The Book of Modern C++) 第一章中,介绍过利用 () 阻止 ADL 的技巧,本篇介绍另一种更加巧妙且有用的阻止 ADL 的方法。 介绍这种方法之前,先讲解一… Continue Reading 另一种阻止 ADL 的巧妙手法
Motivation of std::function_ref std::function_ref 是轻量级的 std::function,能够引用任意形式的可调用对象。在此之前,C++ 便已存在许多… Continue Reading C++26 function_ref and nontype_t
春三月,杂花若绮,纤云都净,正是万物蕃息的时节。 今年的新系列 C++ Adventures 也要开始更新了。这个系列将从新的视角来回顾 C++ 语言中的基本概念,每篇内容的难度等级定位为三到五星,乃… Continue Reading C++ Adventures: Types
本篇源于群友的某个提问,需求略显特别,却是一个非常不错的产生式元编程例子,遂记录一下。 原始问题 优化后的原始问题,代码如下: struct base { virtual void foo() = 0… Continue Reading Clean Conversion from Run-time Values to Compile-time Constants in C++
Introduction 模板是第一阶段元编程最核心的工具,中篇以两章五星难度的内容开头,深入纵览其核心技术与诸般妙诀。本章要讨论的元编程工具——Fold Expressions,依旧处于第一阶段,是… Continue Reading 《产生式元编程》第七章 巧活用折叠表达式
T240725 说到,Unnamed namespaces 有一个唯一的名称会通过 using-directives 自动导入,倘若可以手动指定这个名称,就是 inline namespaces 了。… Continue Reading T240730 inline namespace
Unnamed namespaces,也叫 Anonymous namespaces,是命名空间的一种特殊形式。这种形式可以省略命名空间的名称,如: namespace { /* .. . */ } … Continue Reading T240725 Unnamed namespaces
前言 模板编程,技巧如云,妙艺似雨。第五章滔滔滚滚地讲述了模板的核心概念和常用技术,篇幅稍长,诸般妙诀,未遑悉录,放于本章。 闲话不题,本章尽是一些巧妙的实践,于极尽模板产生式编程大有用处,难度不低,… Continue Reading 《产生式元编程》第六章 感今朝妙艺几人知
前言 本系列分为上中下三个篇章,前四章作为上篇,详细介绍了宏在产生式编程中的原理和应用,本章开始步入中篇,正式进入 C++ 的产生式元编程技术。 宏是 C 时期的产物,功能颇为简陋,亦非图灵完备,即或… Continue Reading 《产生式元编程》第五章 忆昔年模板三两事
临时更一篇关于 format 的内容,经验之谈,置为三星。 进入 C++ 标准的库,实践时日往往很久,像 fmtlib、range-v3 这些经典库都已存在十年以上。不受标准牢笼,一个库的发展会快速许… Continue Reading C++20 std::format 替换 fmtlib 的注意点
宏部分完结 本系列断更良久,去年已更新前三章: 《产生式元编程》 第一章 宏编程计数引原理 《产生式元编程》 第二章 自复用代码生成技 《产生式元编程》 第三章 替换蓝染概念纤悉 宏部分的核心理论和技… Continue Reading 《产生式元编程》第四章 封装合并框架顿立
本篇介绍几个细琐的小特性,可以使代码更加安全可靠。 最常见的情况是采取 for loop 遍历某个容器,比如: std::vector<int> v(10); std::ranges::i… Continue Reading 使用 C++20 安全地比较不同类型的整型值