我正在尝试设计一个可以检查输入错误的构造,所以我在一个参数是字符串引用的测试程序中编写了两个布尔函数。我希望我的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;
}
答案 0 :(得分:4)
您的问题可能是您的代码开头没有#include <string>
。
&&
和||
表达式的评估顺序严格“从左到右”,并且当表达式由左操作数确定时,保证“短路”。
使用其他运算符时,它是未定义的,因此例如if (changeString1(word) + changeString2(word))
,编译器可以在changeString2
之前调用changeString1
。
换句话说,当表达式中有&&
(和)时,如果第一个条件为false,则不计算第二个表达式,如果第一个表达式为true,则计算第二个表达式。由于在这种情况下两者都是正确的,因此都进行了评估。