【问题标题】:does not("!") operator valid everywhere?not("!") 运算符在任何地方都有效吗?
【发布时间】:2012-01-19 22:43:05
【问题描述】:

下面的代码将

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

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

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

if (!item1.same_isbn(item2))

编译器会编译,但结果与预期不符,所以有些东西告诉我代码在哪里是有效的,但正在处理一些我不期望的东西。

所以,正如标题所说,not("!") 操作符实际上在任何地方都一样吗?

【问题讨论】:

  • 如果我在这里错了,请纠正我,但你是说 if (!item1.same_isbn(item2)) { foo(); } 在 item1 匹配 item2 时永远不会执行 foo
  • 你确定item1.same_isbn(item2) 正在返回一个布尔值(真或假)吗?如果在if 语句之前的行上执行cout << item1.same_isbn(item2); 会得到什么?
  • 它在定义它的每个操作数上一致地运行。在!item1.same_isbn(item2) 的情况下,! 运算符的操作数是什么?类型是什么? ! 是否在该类型上定义?
  • Mike Bantegui,是的,我想说... @Gaurav,是的,我敢肯定,当 ISBN 为两项相等。
  • @Vastor:太棒了。当两个 ISBN 不同时会返回什么?

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


【解决方案1】:

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

对于数字操作数,!x 等价于 x != 0。指针操作数也一样(如果指针为空指针则为真)

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

【讨论】:

  • 如果ISBN in item1 and item 2 不等于,我会认为!item1.same_isbn(item2) 将返回true...
【解决方案2】:

试试

如果 ( ! ( item1.same_isbn(item2)))

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

【讨论】:

  • @Vastor 检查这个,item1.same_isbn(item2) 并确保它返回什么。
  • 我这样写std::cout << item1.same_isbn(item2)它返回1,表示为真
【解决方案3】:

在这个例子中:

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) 等于假,上述语句将计算为真。

【讨论】:

  • 只要算!没有为 item1.same_isbn 的返回类型定义做其他事情。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2012-11-15
相关资源
最近更新 更多