小编low*_*ion的帖子

使用bind()时,即使未使用ref()适配器,也会通过引用传递参数

我有以下C++ 11代码:

#include <iostream>
#include <functional>

using namespace std;
using namespace placeholders;

void f(int a, int b)
{
    cout << a << " " << b << endl;
}

void g(int& a, int& b)
{
    a *= 2;
    b *= 3;
}

int main()
{
    int a = 100;
    int b = 200;
    auto greversed = bind(g,_2,_1);
    greversed(b,a);
    f(a,b);
    greversed(ref(b),ref(a));
    f(a,b);
}
Run Code Online (Sandbox Code Playgroud)

基于我对"The C++ Programming Language 4th Edition"(Stroustrup)的解读.968我希望在第一次调用greversed(b,a)期间a和b的副本将通过引用传递给g()并且只有第二个调用实际上会通过引用将a和b传递给g() .

p上给出的示例代码.968:

void incr(int& i)
{
    ++i;
}

void user()
{
    int …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

14
推荐指数
1
解决办法
1595
查看次数

标签 统计

c++ ×1

c++11 ×1