0

デフォルトの初期化子で「ワンタイム」ラムダを使用することと、プレーンな古いメンバー関数を使用することに違いはありますか?

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。別の区別はありますか?

4

2 に答える 2