我一直在阅读std::bindN3225 小节中的描述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)。因此,这定义了对返回的调用包装器的调用传递了原始参数。我错过了什么?