if语句C ++中的优先顺序

时间:2014-03-08 01:16:24

标签: c++ if-statement operator-precedence side-effects

我正在尝试设计一个可以检查输入错误的构造,所以我在一个参数是字符串引用的测试程序中编写了两个布尔函数。我希望我的if语句会评估单词的第一个功能改变部分,然后再次评估第二个功能改变单词,最后评估&&看是否打印。但是,我的代码不会运行,错误表明没有操作数匹配<< cout的运算符,当我尝试输出代码时。我的代码可以解释得比我好。有人可以解释为什么这不起作用?我正在使用Visual Studio 2012。

#include <iostream>
using namespace std;

bool changeString1(string &word){
    word[0]='a';
    return word[1]=='b';
}

bool changeString2(string &word){
    word[2]='c';
    return word[3]=='d';
}

int main(){
    cout << "hello" << endl;

    string word("cbad");
    if(changeString1(word) && changeString2(word)){
        cout << word << endl;
    }
    system("Pause");
    return 0;
}

1 个答案:

答案 0 :(得分:4)

您的问题可能是您的代码开头没有#include <string>

&&||表达式的评估顺序严格“从左到右”,并且当表达式由左操作数确定时,保证“短路”。

使用其他运算符时,它是未定义的,因此例如if (changeString1(word) + changeString2(word)),编译器可以在changeString2之前调用changeString1

换句话说,当表达式中有&&(和)时,如果第一个条件为false,则不计算第二个表达式,如果第一个表达式为true,则计算第二个表达式。由于在这种情况下两者都是正确的,因此都进行了评估。