デフォルトの初期化子で「ワンタイム」ラムダを使用することと、プレーンな古いメンバー関数を使用することに違いはありますか?
struct A
{
int i;
int j = [&]
// something non-trivial,
// that requires multiple
// statements and depends
// on upper data members
{
int f = 0;
for (int k = 0; k < i; ++k) {
f += k;
}
return f;
}();
A(int k) : i(k) { ; }
};
対:
struct A
{
int i;
int J() const
{
int f = 0;
for (int k = 0; k < i; ++k) {
f += k;
}
return f;
}
int j = J();
A(int k) : i(k) { ; }
};
私が目にするのは、2 番目のアプローチの欠点だけです。ここでJ
は、 class の名前空間に追加のシンボルが導入されていますA
。別の区別はありますか?