Skip to content

Commit 6411c5c

Browse files
committed
fix changkun#38: rephrase function pointer
1 parent 5960578 commit 6411c5c

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

book/zh-cn/03-runtime.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -118,27 +118,27 @@ add(1.1, 2.2);
118118
119119
### std::function
120120
121-
Lambda 表达式的本质是一个函数对象,当 Lambda 表达式的捕获列表为空时,Lambda 表达式还能够作为一个函数指针进行传递,例如:
121+
Lambda 表达式的本质是一个函数对象,当 Lambda 表达式的捕获列表为空时,Lambda 表达式还能够作为一个函数类型进行传递,例如:
122122
123123
```cpp
124124
#include <iostream>
125125
126-
using foo = void(int); // 定义函数指针, using 的使用见上一节中的别名语法
126+
using foo = void(int); // 定义函数类型, using 的使用见上一节中的别名语法
127127
void functional(foo f) {
128-
f(1);
128+
f(1); // 编译器将其隐式转化成函数指针
129129
}
130130
131131
int main() {
132132
auto f = [](int value) {
133133
std::cout << value << std::endl;
134134
};
135-
functional(f); // 函数指针调用
135+
functional(f); // 作为函数类型传递
136136
f(1); // lambda 表达式调用
137137
return 0;
138138
}
139139
```
140140

141-
上面的代码给出了两种不同的调用形式,一种是将 Lambda 作为函数指针传递进行调用,而另一种则是直接调用 Lambda 表达式,在 C++11 中,统一了这些概念,将能够被调用的对象的类型,统一称之为可调用类型。而这种类型,便是通过 `std::function` 引入的。
141+
上面的代码给出了两种不同的调用形式,一种是将 Lambda 作为函数类型传递进行调用,而另一种则是直接调用 Lambda 表达式,在 C++11 中,统一了这些概念,将能够被调用的对象的类型,统一称之为可调用类型。而这种类型,便是通过 `std::function` 引入的。
142142

143143
C++11 `std::function` 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++中现有的可调用实体的一种类型安全的包裹(相对来说,函数指针的调用不是类型安全的),换句话说,就是函数的容器。当我们有了函数的容器之后便能够更加方便的将函数、函数指针作为对象进行处理。例如:
144144

0 commit comments

Comments
 (0)