为什么逻辑运算符false不适用于条件

时间:2016-08-02 22:49:56

标签: c++

我只是想知道(相信我,我试图搜索它)为什么我不能把'假'逻辑运算符放在这句话中:

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);
}

可以请一些人说我为什么会这样?

1 个答案:

答案 0 :(得分:3)

您更改了两个示例之间代码的含义。我们假设compare()方法返回bool值。

在第一段代码中,您编写了input.compare("add") == false。当且仅当compare()返回false时,此表达式才为真。

在第二段代码中,您编写了input.compare("add") != 0。如果compare()返回true,则会转换为1,这不等于0,因此true。因此,当且仅当compare()返回true时,此表达式才为真 - 这与第一段代码完全相反。这完全改变了代码的行为。

编写此表达式的首选方法应该完全不提及truefalse。例如:

input.compare("add") and !input.compare("remove") etc.

不要这样写(尽管它的行为相同):

input.compare("add") == true and input.compare("remove") == false etc.