2016-11-14 10 views
0

vecは現在の値が(4,0,0)のカスタムクラスのベクトルで、_vecは現在の値が(1,0,0)のベクトルです。ループとオペレーションの順序

私はこのコードを使用する場合、関数は真を返し、VEC [i]は

for (int i = 1; i < 4; ++i) { 
    vec-= _vec; 
} 
if(vec==_vec){ 
    return true; 
} 

ベクトルは[I] =ベクトル[I] -rhs.vectorようoperator- =オーバーロードされています0]私はこのコードを使用する場合、関数はfalseを返し、VECは[0] 3. が同じことを行うことになって、これらの2つのコードではないですのようです、しかし1

((vec-= _vec) -= _vec) -= _vec; 
if(vec==_vec){ 
    return true; 
} 

であることが示されています?私はなぜ後者がうまく動作しないのか分かりません。

+0

あなたの 'vec - = _vec'は何を返しますか? –

+0

operator- =が* thisを返すように設定されています。デバッグコンパイラを見てみると、vecは1つずつ減算されています - = _ vecが呼び出されますが、最後にvec = 3,0,0が返されるようです。 –

+0

Hmmm ...どうなりますかかっこを削除すれば?コンパイラは悩む? –

答えて

1

最初の例では_vecvecから4回減算しています。

2番目の例では、operator::-=を3回呼び出すだけなので、それは1つのことです。さらに重要なのは、一時的なオブジェクトが作成されているように見えます。*thisはあなたの考えではありません。 operator::-=thisを印刷すると、これを確認するのに役立ちます。

幸運のベスト。