#include <iostream>
int foo(int i)
{
const auto a = [&i](){ i = 7; };
a();
return i;
}
int main()
{
std::cout << foo(42) << std::endl;
return 0;
}
这个代码可以编译( g++ -std=c++11 -Wall -Wextra -Wpedantic main.cpp
), 并打印出7
。这让我很惊讶,因为当我把a
声明为一个常量对象时,我本来期望i
会被引用为const int&
。显然它不是,为什么?
const
引用来捕获j
?我不理解问题所在。你编写了一个函数,接收i
作为参数,忽略它的值,将其设为7,然后求平方并返回结果(49)... 这恰好就是发生的事情!对于j
,你只是暂时将49存储在一个命名变量中然后返回它。你能澄清一下你的意图吗? - Lightness Races in Orbitj
的变量。你对修改后的代码所做的只是将i
设置为7,返回49,然后丢弃这个49的值。 - Lightness Races in Orbit