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

Ben

我试图设计一种可以检查输入错误的构造,所以我在一个测试程序中编写了两个布尔函数,它们的参数是字符串引用。我希望我的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;
}
马特·彼得森(Mats Petersson)

您的问题可能是您还没有#include <string>开始编写代码。

&&||表达式的撤出顺序严格按照“从左到右”的顺序进行,当表达式由左操作数确定时,保证“短路”。

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

换句话说,当&&表达式中有一个(和)时,如果第一个条件为假,则不对第二个表达式求值;如果第一个条件为真,则对第二个表达式求值。由于在这种情况下两者都确实是正确的,因此都将对其进行评估。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章