3

StackOverflowers 様

私は数冊の本を読み、Vector クラスのさまざまな例を見てきました。今、私は疑問に思っていました: パフォーマンスや移植性 (またはアクセス以外のもの) に違いはありますか?

class Vector
{
public:
        ....
private:
    float mTuple[4];
};

class Vector
{
public:
        ....
public:
    float x;
    float y;
    float z;
    float w;
};

Vector.x は Vector.X(); よりも洗練されたソリューションだと思います。演算子 [] のオーバーロードが少し複雑になることはわかっていますが、コンパイラは同じ速度に簡単に最適化できるはずであり、Vector クラスのユーザーには気付かれないでしょう。

これについてどう思いますか?

キリスト教徒

4

2 に答える 2

0

すでに述べたように、ポータブルは双方向ですが、このようなメンバーへのアクセスを許可することは、パフォーマンスがどうしても必要な場合を除き、良い方法ではありません。

ただし、配列にアクセスすると、コンパイラはベース ポインターを読み込み、それにアクセスするための値を追加します。それ以外の場合、getter を使用して、コンパイラは変数のアドレスにアクセスするコードを直接生成します。

したがって、配列にアクセスするには、少なくとも 2 つの命令が必要ですが、それ以外の場合は 1 つしか必要ありません。ただし、これが本当に最適化されるかどうかはわかりません。私はそれに賭けません。ライブがそれに依存している場合は、コンパイラの出力に依存するのではなく、コードが意図したとおりに動作することを確認する必要があります。

于 2013-05-07T12:21:30.390 に答える