不是(“!”)运算符无处不在?

时间:2011-12-14 05:07:01

标签: c++ if-statement conditional operator-keyword

以下代码

  

调用名为item1的Sales_item对象的成员函数。 -C ++ Primer 4th edi。(书)

// first check that item1 and item2 represent the same book
if (item1.same_isbn(item2))

如果item1 is equal to item2的ISBN,它将返回true,但是你给我一些练习,这些练习让我想对原始条件使用相反的效果,不等于(显然),所以我把它这样说了

if (!item1.same_isbn(item2))

编译器会编译,但结果会从预期的结果中遗漏,所以有些东西告诉我代码有效,但处理的是我不期望的东西。

所以,按照标题说,不是(“!”)运算符实际上在哪里工作相同?

3 个答案:

答案 0 :(得分:1)

!一元运算符可以应用于任何标量(数字或指针)表达式。操作数转换为bool,如果表达式为false,则结果为true;如果表达式为true,则结果为true。

对于数字操作数,!x相当于x != 0。对于指针操作数,它是相同的(如果指针是空指针,则它为真。)

它也可以应用于转换为bool的任何类型的表达式,当然也适用于定义了重载operator !的任何类型的表达式。< / p>

答案 1 :(得分:0)

在这个例子中

if (!item1.same_isbn(item2))
{
    //execute this branch if item1.same_isbn(item2) == false
}
else
{
    //execute this branch if item1.same_isbn(item2) == true
}

如果item1.same_isbn(item2)等于false,则上述语句将评估为真。

答案 2 :(得分:0)

尝试

  

if(!(item1.same_isbn(item2)))

注意:请确保item1.same_isbn(item2)返回truefalse