【问题标题】:|= operator, possible short circuit evaluation?|= 操作员,可能的短路评估?
【发布时间】:2014-06-08 14:28:19
【问题描述】:

在 C++ 中,如果我有一个已经为真的布尔值,并且我对其执行了 |=,则保证仍然执行运算符右侧的任何内容?

例如:

bool myBool = true;
myBool |= someFcnThatReturnsBoolean();

我发现它正在执行该功能,但我需要知道它是否由标准明确保证它将被保证执行。我不想遇到基于某些优化或某些编译器停止执行的问题。

【问题讨论】:

  • 是的。 | 不做短路评估。

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


【解决方案1】:
bool myBool = true;
myBool |= someFcnThatReturnsBoolean();

相当于

bool myBool = true;
myBool = myBool | someFcnThatReturnsBoolean();

按位或 (|) 将始终计算两个操作数,因此您的函数将始终被调用。

【讨论】:

  • 不完全等效:a |= b 将评估每个操作数一次,而 a = a | b 将评估 a 两次。
  • @MikeSeymour 通常是的,但在这种情况下,a 是一个局部变量,真的没有区别,不是吗?
  • 确实,如果额外的评估没有效果,那么没有区别。但值得一提的是,它并不总是等价的(可能从您的措辞中推断出来)。
猜你喜欢
  • 2016-08-21
  • 1970-01-01
  • 2016-10-19
  • 2015-11-14
  • 2017-01-21
  • 2012-02-10
  • 2010-12-21
  • 1970-01-01
  • 2013-05-21
相关资源
最近更新 更多