デフォルトイニシャライザでプレーンな古いメンバ関数を使用して "ワンタイム"ラムダを使用することに違いはありますか?対メンバ関数を使用してデフォルトイニシャライザでラムダを使用する
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) { ; }
};
私は見るだけでは、第二のアプローチの欠点である:クラスA
の名前空間に導入され、ここで、余分なシンボルJ
。別の区別がありますか?
個人的には、関数を使用して、メンバー初期化リストの計算に必要な変数を渡します。それ以外の場合は、クラス内の変数の順序を変更することは決してありません。 – NathanOliver
ラムダの初期化を使ったあなたの例はコンパイルされません。 – vordhosbn
@vordhosbn:親がいなくなった。 – Jarod42