博客

noexcept对代码生成的影响

在C++代码中,如果我们把每个函数声明都加上 noexcept ,我们的代码会变得更高效吗? 事情不是这么地简单。 考虑以下代码片段: 我故意不在此翻译单元(translation unit)中定义 g ,否则的话编译器会有足够的信息来内联(inline) g 的所有内容。 尽管如此,所有主要的C++编译器都能弄清楚 f 仅包含对 g…

编程语言基础概念(1):判断(Judgement)与推理规则(Inference Rules)

在编程语言研究领域中似乎充满了行话、希腊字母和怪异的符号。 这些惯例使得论文更加简洁,但同时也非常难以理解。 由于我正在学习 编程语言基础 的课程, 我想在一系列博客文章中分享我学到的关键概念。 编程语言领域中的许多数学概念都源自 命题逻辑 的领域,而今天我们的主题是 判断(Judgement) 与 推理规则(Inference Rules) 的形式语言。 判断(Judgements…

std::function的Const正确性问题

const 类型限定符(type qualifier)是C++语言设计的一大亮点。我们围绕着这个语言特性使用“ const 正确性” (const correctness)的实践来防止 const 对象遭到改变。“ const 正确性”的规则对大多数的类的实现都不难被遵守。但是对使用到类型擦除(type erasure)的类,“ const 正确性”更难被遵守。不幸的是,因为短见,C…