21

次のコードがあります。

#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コピーを取得したことを意味します。完全転送である必要があるため、何が起こったのか疑問に思っています。ttstd::bind

4

2 に答える 2