2016-11-14 6 views
0

vec - это пользовательский класс вектора с текущим значением (4,0,0), а _vec - вектор с текущим значением (1,0,0).Петля и порядок операций

operator- = перегружен так, что вектор [я] = вектор [я] -rhs.vector [я]

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

, если я использую этот код, функция возвращает истину, и VEC [ 0] показано, что 1

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

Однако, когда я использую этот код, функция возвращает ложь, и VEC [0], кажется, 3. являются ли эти два кода предполагается сделать то же самое ? Я не совсем понимаю, почему последний не работает.

+0

Что возвращает ваш 'vec - = _vec'? –

+0

оператор- = установлен для возврата * этого. Прохождение через отладочный компилятор показывает, что vec вычитается полностью до 1 с каждым раз - = _ vec вызывается, но в конце строка, кажется, возвращает vec = 3,0,0 –

+0

Хммм ... что происходит если вы удалите круглые скобки? Компилятор? –

ответ

1

В первом примере вы вычитаете _vec из vec четыре раза.

Во втором примере вы только трижды вызываете operator::-=, так что это одно. Что еще более важно, похоже, что создается временный объект, так что *this - это не то, что вы думаете. Распечатка this в operator::-= поможет подтвердить это.

Удачи.

Смежные вопросы