2016-11-06 11 views
-2

私はC++でのプログラミングに全く新しいので、コンストラクタについて学んでいます。パフォーマンスの理由からクラス変数を初期化するときに、クラス・コンストラクターのbodyの中に値を代入する方が、「Initializer list」を使用して書かれたコンストラクターに関するブログ・ポストではより良い方法です。しかし、それの背後に説明の理由はありません。あなたがそれを説明できるなら、私は感謝するでしょう。Initializer List C++でのパフォーマンスですか?

+0

違いは、コンパイラはコンパイル時にその(イニシャライザリスト)を出力できますが、実行時に本体にコードを記述する必要があります。 –

+0

質問は理にかなっていません。 braced-init-listは、初期化しようとしているタイプに大きく依存します。したがって、そのようなコードのパフォーマンスについて話すことは、一般的ではなく特定のケースに関してのみ行うことができます。 –

+0

有効なC++ –

答えて

1

まず、あなたの質問は完了しません。確かにいくつかの特定のケースがあります。しかし、単純化のために:まず

class Foo { 
    ExampleType var; 
public: 
    Foo(ExampleType x):var(x) { 

    } 
}; 

「ExampleType」クラスが初期化するために呼び出されたのコピーコンストラクタ:それが消えるので、VAR(x)は、その後、「ExampleType」のデストラクタが「X」のために呼ばれています。 しかし、変数代入の場合、まずExample型のコンストラクタが呼び出され、代入演算子が呼び出され、デストラクタが呼び出されます。

関連する問題