循环与操作顺序

时间:2016-11-14 01:59:43

标签: c++ loops

vec是一个自定义类型的向量,当前值为(4,0,0),而_vec是一个当前值为(1,0,0)的向量。

operator- =已经过载,因此vector [i] = vector [i] -rhs.vector [i]

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

如果我使用此代码,则函数返回true,并且vec [0]显示为1

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

然而,当我使用这段代码时,函数返回false,而vec [0]似乎是3。 这两个代码不应该做同样的事吗?我不太明白为什么后者无法工作。

1 个答案:

答案 0 :(得分:1)

在第一个示例中,您要从_vec四次减去vec

在第二个示例中,您只调用了operator::-=三次,这是一回事。更重要的是,似乎正在创建一个临时对象,以便*this不是您认为的那样。在this中打印operator::-=将有助于确认这一点。

祝你好运。