是否可以确保始终首先评估&&运算符的左侧?

正如标题所说:C++ 标准是否有任何保证可以确保&&(或and) 运算符的左侧始终首先计算?老实说,我在C++17 Standard 中搜索不到,我不知道我最想找哪个部分。

问题示例:

我想做这样的事情:

std::unordered_map<std::size_t, std::weak_ptr<T>> objects;

bool f (std::size_t const id) {
  bool result = false;

  if (not objects.at(id).expired()) {
    auto const& object = objects.at(id).lock();

    /* Here left side of `and` most be evaluated first */
    result = object->parent->remove(id) and 
             objects.erase(id) == 1;
  }

  return result;
}

并且要确保代码没有问题。

回答

[expr.log.and]/1 ... 与 不同&&&保证从左到右求值:如果第一个操作数为假,则不求值第二个操作数。


以上是是否可以确保始终首先评估&amp;&amp;运算符的左侧?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>