if 表达式中的运算顺序是否发生变化?

2024-01-15

我最近遇到了一些我认为我马上就能理解的东西,但更多地思考它,我想理解它为什么会这样工作。

考虑下面的代码。这(x-- == 9)显然正在接受评估,而(y++ == 11)不是。我的第一个想法是合乎逻辑的&&启动,发现表达式已经变为 false,并在计算表达式的第二部分之前退出。

我越想,就越不明白为什么会这样。据我了解,逻辑运算符的优先顺序低于增量运算。不应该(y++ == 11)即使整个表达式已经变为假,仍要对其进行求值吗?

换句话说,操作顺序不应该规定(y++ == 11)之前进行评估if陈述意识到整个表达式将是错误的?

#include <iostream>
using namespace std;

int main( int argc, char** argv )
{
    int x = 10;
    int y = 10;

    if( (x-- == 9) && (y++ == 11) )
    {
        cout << "I better not get here!" << endl;
    }

    cout << "Final X: " << x << endl;
    cout << "Final Y: " << y << endl;
    return 0;
}

Output:

Final X: 9
Final Y: 10

逻辑运算符按以下顺序低于增量运算 优先。

优先顺序是not执行顺序。它们是完全不同的概念。优先级顺序仅影响执行顺序,即操作数在其运算符之前进行计算,并且优先级顺序有助于告诉您每个运算符的操作数是什么。

即使对于操作数在运算符之前评估的规则来说,短路运算符也是部分例外,因为它们评估 LHS,然后运算符可以决定是否评估 RHS,maybe评估 RHS,然后计算运算符的结果。

不要认为优先级较高的操作“首先执行”。把它们想象成“结合得更紧”。++优先级高于&&,并且在表达式中x ++ && y ++, 运算符优先级意味着++“结合得更紧密”y than &&确实如此,因此表达式总体等效于(x++) && (y++), not (x++ && y) ++.

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

if 表达式中的运算顺序是否发生变化? 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu

随机推荐

  • 编译OpenCV时出错,致命错误:stdlib.h:没有这样的文件或目录

    我正在尝试编译 OpenCV 我已经尝试过 master 分支 当前提交 dc9602e 和版本 标签 3 1 0 我使用的是Fedora 24 我首先尝试使用Fedora附带的gcc gcc GCC 6 2 1 20160916 Red
  • 检索权限列表

    我正在尝试检索设备中应用程序的权限 奇怪的是 对于某些应用程序 我确实得到了结果 而在其中一些应用程序中 我无法检索任何权限 也许为了获取应用程序的权限列表 应用程序必须设置一些特定的标志 因为如果我尝试以这种方式获取我的应用程序的权限列表
  • 如何在不设置系统范围属性的情况下将 HTTP 代理用于 JAX-WS 请求?

    我有一个应用程序需要向 Internet 上的系统发出 SOAP 客户端请求 因此它需要通过我们的 HTTP 代理 可以通过设置系统范围的值 例如系统属性 来做到这一点 Cowboy style Blow away anything any
  • 为什么 TableAdapter.Fill 数据源之间的性能差异

    我有一个 Windows 窗体应用程序DataGridView居住着一个TableAdapter 我正在使用Fill循环更新UI数据的方法Async像这样子 Private Async Sub updateUI Dim sw As New
  • 如何始终运行 Spyder 项目中的主文件

    我正在开发一个包含多个文件的Python项目 令人烦恼的是我必须在单击运行之前选择描述和调用main的文件 因为如果不是Spyder3 Anaconda 则运行当前选定的文件 如果打开并选择文件 如何从 mainPrjPy py 中的 ma
  • 将 LibTiff 安装到 Visual Studio 2010 [重复]

    这个问题在这里已经有答案了 可能的重复 在 Visual Studio 2010 中使用 LibTiff https stackoverflow com questions 4647791 using libtiff in visual s
  • 将按钮绑定到命令 (Windows Phone 7.5)

    我正在开发我的 Windows Phone 应用程序 它使用一些简单的数据绑定 我已经创建了一个基于 MvvM 编程方法的应用程序 我当前正在开发的应用程序也可以通过 MvvM 方法工作 因为我想让我的代码尽可能干净 所以我正在寻找一种方法
  • 如何与 NHibernate 映射一对多关系中的枚举?

    我有两张单独的桌子 users roles id user id value lt Represented by the enum 还有他们的模型 class User int id IList
  • 在word文档中插入图片

    这是我第一次在 Apache POI 上工作 我要问的问题已经在这个网站上提出了 但没有给出明确的答案 所以我别无选择 只能接受你们的帮助 我正在尝试编写一个java程序 它从一个文件夹中获取图像并将该图像插入到word文档中 我在这个程序
  • 如何将 Django 模型上的属性(虚拟字段)公开为 TastyPie ModelResource 中的字段

    我在 Django 模型中有一个属性 我想通过 TastyPie ModelResource 公开该属性 我的模型是 class UserProfile models Model genderChoices u M u Male u F u
  • Trie、后缀树、后缀数组

    哪种结构提供最佳的性能结果 trie 前缀树 后缀树还是后缀数组 还有其他类似的结构吗 这些结构的良好 Java 实现是什么 编辑 在这种情况下 我想在大型名称词典和大量自然语言文本之间进行字符串匹配 以便识别文本上词典的名称 特里树是第一
  • 在 chrome DevTools/Console 面板中复制文本无法正常工作

    描述错误 最近 在 macOS 版本 12 6 3 上使用 Chrome 版本 112 0 5615 49 时 我在从 DevTools 的控制台面板复制和粘贴时遇到了问题 选择一个单词并复制后 当我粘贴它时 它总是向后移动2个字符 这可能
  • 最好的 JavaScript 日期解析器和格式化器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Zend_DB_Table 选择查询

    我有一个类似以下的代码 class Application Model Company extends Zend Db Table Abstract protected name companies private id private n
  • 为什么 rm 命令不删除文件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我今天访问我的 Ubuntu 16 04 服务器并想要删除文件 test2 时 它根本没有被删除 我用过 rm test2 也 rm f
  • Nexus 7 (ME370T) 上的 BLE 与 Android 4.4.2

    我一直在尝试使用 sdk sdk samples android 18 legacy BluetoothLeGatt 中的示例将 BLE 设备与我的 Nexus 7 ME370T 配对 但我收到信息 不支持 Ble 我正在寻找解决方案 但我
  • XAML文件如何与cs文件关联?

    看来 XAML 文件在 C 项目中应该有相应的 cs 文件 我知道 Visual Studio 可以为我们做所有事情 我只是好奇它们是如何联系在一起的 我的意思是 它们是在项目文件中指定的 还是仅仅因为它们具有相同的名称 而且 App xa
  • 使用 Appium 测试 Android 应用程序时无法创建新的远程会话

    我正在尝试使用 Appium 在 Eclipse 中运行用 java 编码的测试脚本示例 我通过 npm 运行 Appium 我使用的是 Appium 1 6 3 我对 Appium 并不陌生 我之前在 Mac 和 Windows 上运行它
  • 以编程方式设置 java.util.logging 目标

    我使用 java util logging 进行日志记录和跟踪 如何在 Java 应用程序中动态设置应写入日志的文件 The java util logging FileHandler可能会为你完成它的工作 以下代码片段显示了如何以编程方式
  • if 表达式中的运算顺序是否发生变化?

    我最近遇到了一些我认为我马上就能理解的东西 但更多地思考它 我想理解它为什么会这样工作 考虑下面的代码 这 x 9 显然正在接受评估 而 y 11 不是 我的第一个想法是合乎逻辑的 启动 发现表达式已经变为 false 并在计算表达式的第二