std::bind 绑定"by value",这是真的吗?

std::bind binds "by value", is that true?

本文关键字:是真的吗 by bind 绑定 std value      更新时间:2023-10-16

我只是想知道下面的类是否可以正常工作。我有点害怕的是,在构造函数中,在标记的行上,我绑定到的值只是(临时)参数。问题是: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;
};
根据我的测试,

按预期工作。但这是一种在任何情况下都能正常工作的安全方法吗?

From std::bind:

要绑定的参数是复制或移动,并且永远不会通过引用传递,除非在std::refstd::cref中包装。

你的代码没有任何不安全的地方。尽管最好在BoundFct构造函数中使用任何函数,而不是在std::function<>构造函数中使用。