【发布时间】:2018-10-19 04:57:57
【问题描述】:
在以下示例中,我可以从 lambda y 内部访问 constexpr 变量 x,而无需显式捕获它。如果x 未声明为constexpr,则这是不可能的。
是否有适用于constexpr 捕获的特殊规则?
int foo(auto l) {
// OK
constexpr auto x = l();
auto y = []{return x;};
return y();
// NOK
// auto x2 = l();
// auto y2 = []{ return x2; };
// return y2();
}
auto l2 = []{return 3;};
int main() {
foo(l2);
}
【问题讨论】:
-
很想知道为什么投反对票。对我来说,这看起来是标准的一个有趣的角落,几分钟谷歌搜索没有找到答案。
-
我编辑了这个问题,因为我花了很长时间阅读这个问题才能理解为什么
x的非 constexpr 声明被标记为NOK,直到我阅读了回答。希望这能让它更清楚。如果您不同意,请随时回滚。 -
如果您还不了解分析器,有时很难以直截了当的方式提出问题。感谢您澄清问题!
-
constexpr 有几个有趣的案例,请参阅Understanding the example on lvalue-to-rvalue conversion
标签: c++ lambda language-lawyer c++17 constexpr