我有以下代码:
1 #include <functional>
2 #include <iostream>
3
4 using namespace std::placeholders;
5
6 void update23(int i1, int &i2, int &i3)
7 {
8 i2 += i1;
9 i3 += i2;
10
11 std::cout << i2 << " " << i3 << std::endl;
12 }
13
19
20 int main()
21 {
22 int i1 = 10, i2 = 20, i3 = 30;
23
26 std::bind(update23, 10, 20, 30)();
27 std::bind(update23, 10, _1, _2)(20, 30);
28
29 return 0;
30 }
第27行编译失败。失败是有道理的,因为常量作为引用传递。
为什么第26行通过?
我检查了c ++绑定源,但很快就迷路了。
如果你能引导我通过绑定源来了解这里的魔力,那就非常感激!
答案 0 :(得分:2)
像往常一样,您不能使用临时值调用期望可变左值引用(例如第二个{{1}}表达式的结果)的函数。
第一个版本有效,因为绑定值是按值捕获的,并作为lvalues提供给调用。
您可以更改功能签名或将呼叫更改为:
bind