我一直在阅读std::bind
N3225 小节中的描述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)
, wherev1
应该是a
(我传入的参数,换句话说,使用binds
的传入参数是一个完美的转发参数,std::forward<A1>(a1)
)。
INVOKE(f, a)
由 20.8.2 定义为f(a)
。因此,这定义了对返回的调用包装器的调用传递了原始参数。我错过了什么?