博客

C++ lambda表达式教程

C++11引入了lambda表达式,而之后的语言版本不断的对lambda表达式进行改善。lambda表达式表示一个匿名函数。如今,lambda表达式已成为C++语言的核心组成部分,而这篇博文就是给还不了解lambda表达式的C++程序员讲解它的使用方法以及原理。 基本用法 编程中一个常见的任务是将函数作为参数传递给另外的函数。举一个例子,C…

尾递归浅析

尾递归 (tail recursion) 是函数式编程中的重要概念。在这篇文章中,我会用类似于 Elm 语言的伪码来解释尾递归。当然,你并不需要懂得任何的Elm来看懂这篇文章。 从递归到尾递归 考虑以下由递归实现的阶乘函数: 我们可以对 factorial(4) 进行展开: 我们在进行了函数调用之后再进行了乘法,所以我们需要一个地方储存数字4、3、2、1。这些数字被存在 栈帧(Stack…

不要发明自己的资源管理策略

最近,我在工作时遇到了一批旧代码,其中有几个巨大的类。它们是以类似这样的写法写的: 这个示范比实际的类小很多,但我们已经可以从不同的角度来批评它了。比如说这个类的复制操作是违反直觉的浅拷贝。 不过在这里,我想关注“DLL”的部分。这个类是作为我们软件插件的接口而设计的,我们这么用它: 看出问题了吗?我们现在必须用与当年编译动态库插件同样的编译器来编译这段代码(我们当时用的是Visual…