我只是想知道(相信我,我试图搜索它)为什么我不能把'假'逻辑运算符放在这句话中:
while (input.compare("add") == false and input.compare("remove") == false and input.compare("list") == false)
{
cout << endl << "(" << input << ")" << " is not a command system." << endl;
cout << "Please, put only the commands available.";
getline(cin, input);
}
此代码编译,但它不起作用。但是,使用!= 0运算符,它可以工作。
while (input.compare("add") != 0 and input.compare("remove") != 0 and input.compare("list") != 0)
{
cout << endl << "(" << input << ")" << " is not a command system." << endl;
cout << "Please, put only the commands available.";
getline(cin, input);
}
可以请一些人说我为什么会这样?
答案 0 :(得分:3)
您更改了两个示例之间代码的含义。我们假设compare()
方法返回bool
值。
在第一段代码中,您编写了input.compare("add") == false
。当且仅当compare()
返回false
时,此表达式才为真。
在第二段代码中,您编写了input.compare("add") != 0
。如果compare()
返回true
,则会转换为1
,这不等于0
,因此true
。因此,当且仅当compare()
返回true
时,此表达式才为真 - 这与第一段代码完全相反。这完全改变了代码的行为。
编写此表达式的首选方法应该完全不提及true
或false
。例如:
input.compare("add") and !input.compare("remove") etc.
不要这样写(尽管它的行为相同):
input.compare("add") == true and input.compare("remove") == false etc.