次の例では、ラムダ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);
}
キャプチャ/アクセスのために
constexpr
に適用される特別なルールはありますか?
はい、constexpr
変数は lambda でキャプチャせずに読み取ることができます:
ラムダ式は、変数の場合、変数をキャプチャせずに変数の値を読み取ることができます
- const不揮発性積分型または列挙型を持ち、定数式で初期化されている、または
- constexprであり、簡単にコピーして構築できます。