【问题标题】:Explain the following from Accelerated C++ please请从 Accelerated C++ 解释以下内容
【发布时间】:2010-11-12 01:57:57
【问题描述】:

我不明白以下来自 Accelerated C++ 的摘录:

开始

因为 ||是左结合的,并且 因为相对优先 ||,== 和 -,

r == 0 || r == 行 - 1 || c == 0 || C == cols - 1 的含义与我们将其所有 括号中的子表达式:

((r == 0 || r == (行 - 1)) || c == 0) || c == (cols - 1)

一直到

Otherwise, it does something else, which we must now define.

我不明白这一点。你怎么会用你自己的话告诉我呢?

【问题讨论】:

  • 对于其他人,这是我的副本中的第 2.4.1.2 节第 25 页。

标签: c++ logical-operators short-circuiting


【解决方案1】:

如果您要评估一系列条件,假设“如果 x 为 1 或 y 为 2,则调用函数 foo()”,那么执行第二个测试(y 为 2)如果你已经知道 x 是 1。||操作员是这样工作的:

i( x == 1 || y == 2 ) {
     foo();
}

如果 x == 1,则不会计算表达式 y == 2,因为它不是必需的。这称为短路评估,如果评估成本高昂,可以节省大量时间。

如果这不是您要问的,请让您的问题更明确。

【讨论】:

  • 我认为您还应该指出,这意味着如果第一个表达式的计算结果为 true,那么在第二个表达式中执行的任何计算都不会发生,因为这会导致令人困惑的错误。还是我弄错了?
  • 我以为我是这么说的|
  • 我在想像 x == 1 || 这样的东西++y == 2。如果 x 等于 1,y 将不会递增。
  • 当我说第二个表达式不会被计算时,这就是我的意思。这就是 C++ 中计算表达式的含义。
  • 整个部分是否从我所说的地方开始到我所说的地方(中间有一些东西,我也在谈论它们)就是这个意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 2014-04-04
  • 2012-12-09
相关资源
最近更新 更多