2015-09-11 82 views
-1

我只是想知道下面的課程能否正常工作。我有點害怕的是,在構造函數中,在標記行上,我綁定了只是(臨時)參數的值。所以問題是:std::bind是否按值參數?對我而言,這在我閱讀的文件中並不清楚。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; 
}; 

據我測試,它按預期工作。但是,無論如何,這是一種安全的方法嗎?

+0

我認爲這是很清楚地表明[這裏](http://en.cppreference.com/w/cpp/utility/functional/bind)。 – juanchopanza

+0

我不太明白爲什麼這個問題得不到解決。我認爲這是一個非常合理的問題,要問是否保存了某些東西,考慮到人們教你多久這個或那個方案是危險的。 – Michael

+0

這看起來可能很苛刻,但我的猜測是通過閱讀一些文檔很容易發現這一點。 – juanchopanza

回答

2

std::bind

的參數結合是複製或移動,並且永遠不會通過引用傳遞除非包裹在std::refstd::cref

沒有什麼不安全的代碼。儘管在BoundFct構造函數中使用任何函數會更好,但不會使用std::function<>