【发布时间】:2017-02-23 19:55:35
【问题描述】:
#include <iostream>
int foo(int i)
{
const auto a = [&i](){ i = 7; return i * i; };
a();
return i;
}
int main()
{
std::cout << foo(42) << std::endl;
return 0;
}
编译(g++ -std=c++11 -Wall -Wextra -Wpedantic main.cpp)并返回49。这让我感到惊讶,因为通过将a 声明为一个常量对象,我本来希望i 被引用为const int&。显然不是,为什么?
【问题讨论】:
-
代码的哪一部分通过 const ref 捕获了
j?我不明白这个问题。你创建了一个函数来获取i,忽略它的值,使其为 7,平方,然后返回结果(49)......这正是发生的事情!你对j所做的只是在返回之前将 49 短暂地存储在一个命名变量中。你能澄清一下你的意图吗? -
现在您根本没有名为
j的变量。你对这个修改后的代码所做的只是将i设置为 7,返回 49 然后丢弃 49 的值。 -
因为你被非常量引用捕获了。这就像问为什么可以通过
int *const修改东西。 -
我不明白你的问题,就像@LightnessRacesinOrbit 所说的那样。
-
我想知道 lambda 前面的
const说明符有什么作用。
标签: c++ c++11 lambda constants