在以下示例中,我可以从lambda constexpr
内部访问x
变量y
,而无需显式捕获它。如果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);
}
答案 0 :(得分:32)
是否有适用于
constexpr
捕获/访问的特殊规则?
是的,constexpr
变量无法在lambda中捕获:
lambda表达式可以在不捕获的情况下读取变量的值 如果变量
- 具有const非易失性整数或枚举类型,并已使用常量表达式初始化,或
- 是constexpr并且可以轻易地复制构造。