1

ご存知かもしれませんが、

A::A() {
    this->foo = 1;
}

以下と同じです:

A::A() : foo(1) {
    this->foo = 1;
}

二重宣言のため、これは非効率的です。
コンパイラはこれを最適化するかもしれませんが、私の場合、クラスは POD ではありません。
メンバーは 1 行に圧縮できないため、コンストラクター本体で定義する必要があります。

これを行う方法はありますか?

4

1 に答える 1

3

いいえ、コンストラクタ本体で初期化することはできません。これは、mem-initializer リストで行うか、クラス内の初期化子を使用して (メンバー宣言で) 行う必要があります。ただし、初期化を行うために関数 (またはラムダ) を呼び出すことを妨げるものは何もありません。

A::A() : foo([]() { /* ... */ } ())
{}

// or

A::A() : foo(initFoo())
{}

Foo A::initFoo() { /* ... */ }
于 2018-02-01T17:20:23.290 に答える