【发布时间】:2012-05-17 05:03:44
【问题描述】:
众所周知,std::bind 和 std::thread 的默认行为是复制(或移动)传递给它的参数,并且要使用引用语义,我们必须使用引用包装器。
有谁知道为什么这是一个好的默认行为?特别是。在具有右值引用和完美转发的 C++11 中,在我看来,仅完美转发参数更有意义。
std::make_shared 虽然并不总是复制/移动,但只是完美地转发提供的参数。为什么这里有两种看似不同的转发参数行为? (总是复制/移动的 std::thread 和 std::bind 与不复制/移动的 std::make_shared )
【问题讨论】:
-
如果你绑定一个本地的引用,你会遇到麻烦。
-
如果被调用函数不存在超出本地范围,我不会。 C++ 中有很多东西可以让你大吃一惊。我的问题更多的是这种行为似乎不太直观。
-
在某些时候,我的答案包含“并且本地超出范围”,但显然它在编辑后被删除:S