【发布时间】:2011-07-01 05:06:20
【问题描述】:
我一直在阅读 N3225 中 std::bind 的描述,位于 20.8.10.1 小节中。它说下面应该打印1,但我认为bind应该复制它的参数,因此它应该打印0。如果要引用传递的参数,则需要使用std::ref,对吗?
void f(int &a) { a = 1; }
int main() {
int a = 0;
std::bind(f, a)();
std::cout << a << std::endl;
}
GCC 输出0,与我认为可行的一致。但是 N3225 说std::bind(f, a1) 应该返回一个调用包装器,当被wrapper() 调用时将调用INVOKE(f, v1),其中v1 应该是a(我传入的参数,换句话说,使用binds' s 传入参数,这是一个完美的转发参数,std::forward<A1>(a1))。
INVOKE(f, a) 由 20.8.2 定义为 f(a)。因此,这定义了对返回的调用包装器的调用传递了原始参数。我错过了什么?
【问题讨论】:
-
stackoverflow.com/questions/4327474/…(不是重复的而是相关的,我们是否会在C++0x中得到“完美转发”)