c++ - 是否有任何保证可以确保始终首先评估 && 运算符的左侧?
问题描述
&&
正如标题所说:C++ 标准是否有任何保证可以确保(or ) 运算符的左侧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 ... 与 不同
&
,&&
保证从左到右的评估:如果第一个操作数为假,则不评估第二个操作数。
推荐阅读
- reactjs - 在 React Hooks 中通信组件的简单而正确的方法是什么?
- maven - 是否添加到我项目的 POM 中的存储库用于定位依赖项的依赖项?
- java - 向成员添加角色时的任务权限 Discord4J
- html - 目前我的标签“底部”有问题
- sql - Substr 函数中的子查询?
- r - 将总计添加到数据框
- mysql - 获取在触发器中生成的 id 以获取更多请求
- javascript - 在新窗口中打开 JavaScipt URL
- flutter - 如何从flutterapp将图像打开到外部应用程序
- javascript - Bootstrap is not working under Admin template