C++ 标准::绑定不';你不能参考吗?

C++ 标准::绑定不';你不能参考吗?,c++,reference,compilation,bind,C++,Reference,Compilation,Bind,我有以下程序,它可以工作: #include<iostream> #include<functional> using namespace std; using namespace std::placeholders; void f(int i,int j){ ++i; ++j; } int main(){ int i=0; int j=0; bind(&f,_1,i)(3); bind(&f,j,_1)(4

我有以下程序,它可以工作:

#include<iostream>
#include<functional>
using namespace std;
using namespace std::placeholders;
void f(int i,int j){
    ++i;
    ++j;
}
int main(){
    int i=0;
    int j=0;
    bind(&f,_1,i)(3);
    bind(&f,j,_1)(4);
    return 0;
}
#包括
#包括
使用名称空间std;
使用名称空间std::占位符;
空f(整数i,整数j){
++一,;
++j;
}
int main(){
int i=0;
int j=0;
绑定(&f,_1,i)(3);
束缚(&f,j,_1)(4);
返回0;
}
但如果我将f更改为接收引用,并添加ref()以绑定:

#包括
#包括
使用名称空间std;
使用名称空间std::占位符;
无效f(内部和i、内部和j){
++一,;
++j;
}
int main(){
int i=0;
int j=0;
绑定(&f,_1,参考(i))(3);
绑定(&f,参考(j),_1)(4);
返回0;
}
那么它无法编译:

clang--std=c++11给出以下错误:

no matching function for call to object of type '__bind<void (*)(int &,
  int &), std::__1::placeholders::__ph<1> &, int &>'
bind(&f,_1,i)();
对类型为“\u bind”的对象的调用没有匹配函数
绑定(&f,_1,i)();
如何修复它

bind(&f, _1, ref(i))(3);
bind(&f, ref(j), _1)(4);
一般来说,这和打电话是一样的:

f(3, i);
f(j, 4);
其中函数
f
定义为:

void f(int &i, int &j) {
    ++i;
    ++j;
}
但是不能将非常量左值引用(如
int&i
)绑定到右值(如
3
),这就是编译器抱怨的原因

一般来说,这和打电话是一样的:

f(3, i);
f(j, 4);
其中函数
f
定义为:

void f(int &i, int &j) {
    ++i;
    ++j;
}

但是不能将非常量左值引用(如
int&i
)绑定到右值(如
3
),这就是编译器抱怨的原因。

使用lambda而不是bind。至少使用-std=c++14
f(i,4)
也是一个错误。std::ref不会创建引用,它会创建一个引用包装器。请使用lambda而不是bind。至少使用-std=c++14
f(i,4)
也是一个错误。std::ref不创建引用,而是创建一个引用包装器。