2

重複の可能性:
コンストラクター初期化子リストによる最適化

OK、ここに私のジレンマがあります: クラスがあり、いくつかのコンストラクターがあり、それらが何度も呼び出されるとします (1 秒あたり数億回、速度が重要です)。

どの方法が好ましいですか?(全然違いますか?)

方法 A:

// Prototype
class MyClass
{
    public:
        // Constructor
        MyClass (int x, int y, int z) : X(x), Y(y), Z(z) {}

        // Variables
        int X,Y,Z;
};

方法 B:

// Prototype
class MyClass
{
    public:
        // Constructor
        MyClass (int x, int y, int z);

        // Variables
        int X,Y,Z;
};

// Implementation
MyClass::MyClass(int x,int y,int z)
{
     this->X=x;
     this->Y=y;
     this->Z=z;
}
4

2 に答える 2

3

プロファイルツールを使用して自分で測定する必要があります。組み込み型の場合、(構築速度に関して)違いはないかもしれませんが、クラス型の場合は、メンバー初期化子リストを使用することが常に望ましい方法です。

于 2013-01-27T08:54:52.880 に答える
0

あるドナルド・クヌースの賢明な言葉で:

時期尚早の最適化は諸悪の根源です。

最も読みやすく保守しやすいスタイルでコードを記述します。私の個人的な好みは、ヘッダーの外側に個別に実装することです。インライン化するのに十分小さい場合、コンパイラはそれをインライン化します。インライン化しないほど大きいとコンパイラが判断した場合 (コード サイズを縮小し、命令キャッシュ スペースを節約するためなど)、コンパイラはインライン化しません。

次に、実際の経験的データに基づいてベンチマークと最適化を行います。

于 2013-01-27T11:04:51.000 に答える