std :: bind绑定“按值”,是真的吗?

时间:2015-09-11 12:10:18

标签: c++ c++11

我只是想知道以下类是否能正常工作。我有点害怕的是,在构造函数中,在标记的行上,我绑定到只是(临时)参数的值。所以问题是:std::bind是否按参数取值?对我而言,我在阅读的文件中并不清楚这一点。

class BoundFct {
public:
    BoundFct(function<void(int, int)> fct, int v){
        boundFct = bind(fct, v, _1); // ** PROBLEM HERE ? **
    }

    void call(int i){
        boundFct(i);
    }

private:
    function<void(int)> boundFct;
};

据我测试,它按预期工作。但它是否是一种在任何情况下都能正常工作的安全方法?

1 个答案:

答案 0 :(得分:2)

来自std::bind

  

绑定的参数是复制或移动,除非包含在std::refstd::cref中,否则永远不会被引用传递。

您的代码没有任何不安全因素。虽然最好在BoundFct构造函数中使用任何函数,而不是std::function<>