if 语句是否保证不会进行不必要的评估? [复制]

2023-11-22

给定两个条件&&联系。我知道评估的顺序是从左到右。但是,如果第一个条件解析为 false,那么第二个条件是否保证不会被评估?

#define SIZE
bool array[SIZE];
int index;

// play with variables
// ...

if(index < SIZE && array[index])
{
    // ...
}

在此示例中,如果第一个条件为 false,则不得评估第二个条件,因为数组中的访问将超出范围。

顺便说一句,我不能简单地用两个嵌套条件if陈述,因为实际上我需要像这样的逆(!(in_range && get_element))。对于嵌套语句,我需要使用goto跳过下面的代码块。


但是,如果第一个条件解析为 false,那么第二个条件是否保证不会被评估?

是的,这就是C++的短路。根据 C++11 标准第 5.14/1 段:

The &&运算符组从左到右。操作数都根据上下文转换为bool(第 4 条)。 结果是true如果两个操作数都是true and false否则。不像&, &&保证从左到右 评估:如果第一个操作数是,则不计算第二个操作数false.

正如马修 M.评论中正确提及,上述内容仅适用于内置逻辑 AND 和逻辑 OR 运算符:如果这些运算符被重载,则调用它们将被视为常规函数调用(因此不适用短路,并且不保证计算顺序)。

如第 5/2 段所述:

[Note:运算符可以重载,即在应用于类类型的表达式时赋予含义(子句 9) 或枚举类型(7.2)。重载运算符的使用被转换为函数调用,如下所述 在 13.5 中。重载运算符遵守第 5 条中指定的语法规则,但要求 操作数类型、值类别和计算顺序被函数调用规则取代。 [...]——end note ]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

if 语句是否保证不会进行不必要的评估? [复制] 的相关文章

随机推荐

  • 如何在 Spring MVC 应用程序中插入 TCP-IP 客户端服务器

    我想知道是否可以在 spring mvc 应用程序和使用 TCP IP 连接的遗留系统之间插入双向连接 如前所述 遗留系统使用 TCP ip 而不是 http 因此无需谈论 HTTP 更好 谢谢 See 弹簧集成 您可以使用消息传递网关将
  • 文件系统如何处理并发读/写?

    用户A请求系统读取文件foo同时用户 B 希望将他或她的数据保存到同一个文件中 在文件系统级别如何处理这种情况 大多数文件系统 但不是全部 使用锁定来保护对同一文件的并发访问 锁可以是独占的 因此第一个获得锁的用户可以获得访问权限 后续用户
  • 将文本(单个字母)附加到文本文件中每行的末尾

    以下是我正在使用的文本文件的示例 437868313 2436413 Wyatt Trenton 08 21 2003 211000010262002 211000010262002 2014 01 54435A000 510 Social
  • 将表更改迁移到生产 sailsjs 表的最佳方法

    我刚刚从数据库中丢失了 11 000 条记录 只是运行 sailsjs 命令 其中没有 prod 部分 所以我想我应该问当 Model js 更改时更改生产服务器上的表的最佳方法是什么 Thanks 永远不应该在生产中进行自动迁移 这是一种
  • 在不冻结 UI 线程的情况下实现游戏循环的最佳方法

    我正在尝试用 Java 制作一个简单的 2D 游戏 到目前为止我有一个JFrame 带有一个菜单栏 以及一个扩展的类JPanel并覆盖它paint方法 现在 我需要开始一个游戏循环 我将在其中更新图像的位置等 然而 我一直在思考如何最好地实
  • 如何在asp.net Windows身份验证中获取用户详细信息

    我正在使用 Windows 身份验证并访问用户名 IIdentity winId HttpContext Current User Identity string name winId Name 但我想获取其他详细信息 例如用户全名和电子邮
  • 为什么 Haskell 不接受我的组合“zip”定义?

    这是教科书上的 zip 函数 zip a gt a gt a a zip zip zip x xs y ys x y zip xs ys 我之前在 haskell 上询问 zip 是否可以单独使用 foldr 来实现 没有递归 没有模式匹配
  • LaTeX:在数学模式下堆叠三行

    Hey 我正在编写一个具有三个索引 i j k 的公式 在该行的末尾我想添加以下内容 我 1 aj 1 bk 1 n 但我希望它采用较小的字体并堆叠在一起 有人可以告诉我一个可以完成此任务的命令吗 mbox 无法执行数学模式 我认为 Try
  • 我可以使用 CSS 反转两个元素的显示顺序吗?

    这听起来很疯狂 但请耐心听我说 我正在编写一个页面 基本上包含以下内容 div div div div div div 我希望页面显示不同 具体取决于它是为屏幕渲染还是打印 通过媒体查询的魔力实现 特别是 在打印时 我想要 child2出现
  • 如何使用 Python / psycopg2 高效更新大型 PostgreSQL 表中的列?

    我有一张大桌子 上面有大约 PostgreSQL 9 4 数据库中有 1000 万行 它看起来有点像这样 gid number1 random result 1 2 NULL NULL 2 15 NULL NULL 现在我想更新列rando
  • Scala 性能:命令式与函数式风格

    我是 Scala 新手 刚刚阅读Scala 示例 在第2章中 作者有2个不同版本的快速排序 一种是命令式 def sort xs Array Int def swap i Int j Int val t xs i xs i xs j xs
  • C++ 关于 boost::unordered_map 和 boost::hash 的一些问题

    我最近才开始深入研究 boost 及其容器 并且我在网络和 stackoverflow 上阅读了一些文章 其中提到 boost unordered map 是大型集合中执行速度最快的容器 所以 我有这个类 State 它在容器中必须是唯一的
  • 在 asp.net mvc 3 中管理每个会话和请求的 AutoFac 生命周期范围

    我想在 Web 应用程序中使用 AutoFac 我有根容器 每个会话一个子容器和每个请求一个子容器 我试图找出管理这些生命周期范围的最佳方法 在 Global asax cs 中我添加了以下内容 protected void Applica
  • 将客户端生成的数据以 JavaScript 的形式保存为文件

    我正在使用 webRTC 开发 FileShare 应用程序 我想用 JavaScript HTML 实现客户端 该代码应在客户端浏览器上运行 通过 webRTC 下载时我需要保存它们 这些文件可能非常大 在将它们作为文件保存到磁盘之前 我
  • 如何阻止 asp:RadioButtonList 呈现 HTML 表格? [复制]

    这个问题在这里已经有答案了 我想呈现一个简单的控件列表 我的 ASP NET 代码隐藏如下所示 RadioButtonList list new RadioButtonList list ID rbl name list CssClass
  • android 毕加索 清除缓存

    我正在使用Picasso显示一个人的肖像 当肖像改变时 我想清除该用户的缓存 或所有用户的肖像缓存 这是我的代码 它不起作用 有人可以帮助我吗 LruCache lruCache new LruCache context lruCache
  • 删除和/或排序Usings有什么价值?

    我一直在奔跑删除和排序用途当然 因为这似乎是正确的做法 但现在我开始想 我们为什么要这样做 当然 干净和紧凑的代码总是有好处的 如果 MS 花时间将其作为 VS 中的菜单项 一定会有一些好处 谁能回答 为什么要这样做 删除和 或排序使用对编
  • 可构造点的坐标能否准确表示?

    我想编写一个程序 让用户可以像使用直尺和圆规一样绘制点 线和圆 然后我希望能够回答这个问题 这三个点共线吗 为了正确回答 我需要在计算点时避免舍入误差 这可能吗 如何表示内存中的点 我研究了一些不寻常的数字库 但我没有找到任何声称提供精确算
  • jsp getServletContext() 错误

    html
  • if 语句是否保证不会进行不必要的评估? [复制]

    这个问题在这里已经有答案了 给定两个条件 联系 我知道评估的顺序是从左到右 但是 如果第一个条件解析为 false 那么第二个条件是否保证不会被评估 define SIZE bool array SIZE int index play wi