bind1st和bind2nd

时间:2011-05-24 15:04:23

标签: c++ stl

我对以下参考文献有一个看法:

bind1st

bind2nd

我不明白的是两者之间的区别。 任何人都可以帮助我了解差异。一个例子会更有帮助。

4 个答案:

答案 0 :(得分:8)

bind1st绑定第一个参数(例如,您有foo(int a, int b),然后bind1st(foo, 1)(bar)将等同于foo(1, bar)),bind2nd绑定第二个参数。不要使用它们,它们几乎没用 - 在C ++ 0x中使用通用boost::bind代替(或std::bind)。

答案 1 :(得分:3)

假设您有一个函数对象f(x,y)和一个只需要一个变量就需要一个functoid的算法。然后有两种可能性:

  • y设置一些固定值,让算法在x
  • 上运行
  • x设置一些固定值,让算法在y
  • 上运行

这就是区别。

答案 2 :(得分:0)

这很明显。 bind1st将值绑定到仿函数的第一个操作数(假设您知道C ++中的仿函数是什么),bind2nd到第二个。但对于+(或std::plus)的交换运算符,它实际上没有区别(如果你没有在该示例中使用非交换行为重载+)。

答案 3 :(得分:0)

bind1st绑定函数的第一个参数,而bind2nd绑定第二个参数。如果像plus()仿函数这样的操作没有区别,因为在这两种情况下两个数字的加法保持相同,但是如果你做了像minus()这样的操作,那么根据你使用bind1st或bind2nd,例如5- 4和4-5将产生不同的结果,现在你得到了bind1st第一个参数绑定和bind2nd第二个参数绑定之间的区别。