C++ C++;11 lambda捕获列表[=]使用引用
当我捕获一个值,但值类型是模板函数中的引用时C++ C++;11 lambda捕获列表[=]使用引用,c++,lambda,c++11,capture,C++,Lambda,C++11,Capture,当我捕获一个值,但值类型是模板函数中的引用时 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 &
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);
}
但在tt1(T)
T
是int&
所以当lambda调用test(t1)
时t1
应该是int&
。为什么输出不正确
2
3
3
通过按值捕获
[=]
您的lambda获得t1
的本地副本,并将其传递给test()
,因此lambda中t1
发生的任何事情都不会影响原始t
对象
T是int&因此t1应该是int&
引用不是指针T
可以推断为int&
,因此t1
是一个参考。但是您要求lambda按值捕获t1
。这意味着复制t1
引用的值
如果t1
是指针,则将按值获取指针。但是你不能“按值”得到一个引用;您只能获取被引用的值。I在lambda中测试。[=]()可变的{mytesttypecode(decltype(t1));返回测试(t1);}();t1是int&。有些不好的事情我想。。。。。
2
3
3