use*_*647 5 c++ lambda capture 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);
}
Run Code Online (Sandbox Code Playgroud)
它打印
2
3
2
Run Code Online (Sandbox Code Playgroud)
但是,当lambda调用时应该T t1(t); T是int&这样.为什么输出不是t1int&test(t1)
2
3
3
Run Code Online (Sandbox Code Playgroud)
T是int,所以t1应该是int&
引用不是指针.T可以推断为int&,因此t1是一个参考.但是你要求lambda t1按值捕获.这意味着复制引用的值t1.
如果t1是指针,您将按值获取指针.但你不能"按价值"得到参考; 你只能获得被引用的值.