“+” 的几个使用小技巧,你了解吗
这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。 一般二元 + 操作符用得较多,只有一个操作数时,没人会多此一举地把 1 写成 +1。 不过若是操作数为整数或无作用域枚举类型,一元 + 操… Continue Reading “+” 的几个使用小技巧,你了解吗
Dive deep into the C++ core, and discover more!
这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。 一般二元 + 操作符用得较多,只有一个操作数时,没人会多此一举地把 1 写成 +1。 不过若是操作数为整数或无作用域枚举类型,一元 + 操… Continue Reading “+” 的几个使用小技巧,你了解吗
衔引 原理毕,复用续。历观编程概念,避及重复,提其不变,于迭代与递归为甚。产生式元编程,乃欲自动产生百千代码,迭代递归,自是重要组件,不可不备。 本章以 FOR_EACH 为例,渐次派生问题,引出技术… Continue Reading 《产生式元编程》第二章 自复用代码生成技
引言 自 C 以来,宏为代码生成工具。至 C++98 则有模板,泛型编程日益盛行。迄于 C++20,引编译期表达式,添 Concepts,元编程基础支持始渐完善。由此元编程之技稍简。而静态反射乃元编程… Continue Reading 《产生式元编程》第一章 宏编程计数引原理
宏编程的基本原理都已暗含于解决前两节问题的过程当中,本节开始,依此继续展开。 经由前面的努力,我们已掌握条件逻辑在宏编程的表示,代码生成往往涉及循环,所以今天来讲如何实现一个 FOR_EACH。 FO… Continue Reading T230925 Generative Metaprogramming with Macro Preprocessor (Part 3)
经过上篇分析实现,第一个需求「计算可变宏参数个数」已由 COUNT_VARARGS 基本实现。 让我们先总结一下用到的思想和发现的技术,再进入下一步。 2.1 通过增加一个间接层,能够解决无法直接解决… Continue Reading T230920 Generative Metaprogramming with Macro Preprocessor (Part 2)
这期开始将写一些关于宏编程的内容,讲解宏作为代码生成工具在产生式元编程中的运用。 有人可能会有疑问,已有模板作为元编程工具,为何还需要使用宏这种古老的代码生成工具?自然是因为如今模板元编程的代码生成能… Continue Reading T230917 Generative Metaprogramming with Macro Preprocessor (Part 1)
今天讲消息分发的一种编译期实现法。 编程是一门非常依赖逻辑的学科,逻辑分为形式逻辑和非形式逻辑,编程就属于形式逻辑。形式逻辑指的是用数学的方式去抽象地分析命题,它有一套严谨的标准和公理系统,对错分明;… Continue Reading Compile time dispatching in C++20
今天这篇讲 Monads,对 C++ devs 来说是一个比较新的概念,也是一个比较难理解的概念。本文将概念和实践串起来讲,先讲抽象理论,后面讲具体实现和使用,以全面理解其定位。 Language 编… Continue Reading Monads in Modern C++, What, Why, and How
今天再来看看 C++23 Monadic std::optional,在 Overview of C++23 Features 只是简单介绍了用法,这里来说说设计原理。 std::optional 是… Continue Reading T230807 Reviewing C++23 Monadic std::optional
What and Why 这次单独说一下 std::exchange,它是 C++14 <utility> 提供的一个函数模板,实现很简单。 template<class T, cl… Continue Reading std::exchange use cases
今天讲一个 Idiom 加一些 Tricks。 本次内容紧紧围绕着 The Rule of the Big Five,即 destructor copy constructor copy assign… Continue Reading T230723 copy-and-swap Idiom and More Tricks
本次谈逻辑分派。 三种最基本的逻辑关系为相似、承接和因果关系。 逻辑分派主要指的是因果关系,因果关系里面又包含条件关系。因果关系是一种非常特殊且重要的关系,表示两个功能块之间具备极强的依赖性。功能 B… Continue Reading T230713 Dispatch table
今天谈谈 inline constexpr。 上次讲过 static constexpr,它用于 function scope/class scope ,此时 constexpr 会隐式 inline… Continue Reading T230707 inline constexpr
提到 C++,许多人的印象绝对不会少了一个词:复杂。 的确,2000 页左右的标准,甚至一些特性单独就能成一本书,怎么能不复杂? 但也别忘了它是一门接近 40 年的编程语言。 系统大了,问题本身就很复… Continue Reading T230705 Complex C++
占位,待录。