我有以下代码:
#include <stdio.h>
#include <functional>
template <typename T>
auto callback(T&& func) ->decltype(func())
{
return func();
}
double test(double& value)
{
value=value+1.0;
return value;
}
int main(void)
{
double t=1.0;
printf("%f\n",t);
test(t);
printf("%f\n",t);
callback(std::bind(test,t));
printf("%f\n",t);
}
它输出
1.000000
2.000000
2.000000
这意味着该callback
函数获得了 的副本t
而不是对 的引用t
。我想知道发生了什么,因为std::bind
它应该是完美的转发。