を使用C++ 11ラムダ取り込みリスト[=]テンプレート関数の参照は、参照
template<class T>
void test(T&&i)
{
++i;
std::cout << i << std::endl;
}
template<class T>
void typetest(T&& t)
{
++t;
T t1(t);
[=]() mutable { std::cout << t1 << std::endl; return test(t1); }();
std::cout << t << std::endl;
}
int main()
{
int i=1;
typetest(i);
}
は
2
3
2
しかしに印刷しますT t1(t);
T
は、ラムダがを呼び出したときにt1
がint&
あるべきint&
です。なぜ出力ではありません、あなたのラムダは、それがtest()
に渡すt1
のローカルコピーを取得し、そのキャプチャバイ値[=]
を通じて
2
3
3
私はラムダでテストします。 [=]()mutable {mytesttypecode(decltype(t1)); return test(t1);}(); t1はint&です。何か良いとは思わない..... – user1625647