cout 语句中的调用顺序说明,后缀与前缀

2023-12-01

当我在打印测试时注意到实际值输出中出现意外情况时,我正在重载后缀和前缀 ++ 运算符并测试它们。作为示例,这是一个整数测试:

int i = 0;
cout << "before prefix: " << i << " prefixing.. " << ++i << " after prefix. " << i << endl;

在我看来,这应该打印出来"before prefix: 0 prefixing... 1 after prefix. 1"

令我沮丧的是,这打印before prefix: 1 prefixing.. 1 after prefix. 1为什么在调用开始时它就已经是 1 了?!好吧,也许它在打印之前解析了语句,并且 i 在打印开始之前就增加了。

但后来我测试了后缀整数递增......

int i = 0;
cout << "before postfix: " << i << " postfixing.. " << i++ << " after postfix. " << i << endl;

before postfix: 1 postfixing.. 0 after postfix. 1

除了中间语句之外,增量发生在任何地方?!这是相当违反直觉的。有人可以解释一下吗?


在同一语句中(或者从技术上讲,在两个语句之间)读取并递增变量序列点,在本例中为分号)导致未定义的行为- 换句话说,编译器可以为所欲为。

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

cout 语句中的调用顺序说明,后缀与前缀 的相关文章

随机推荐

  • C++ 编译器优化器是否允许破坏我的析构函数被多次调用的能力?

    我们曾经采访过一位非常有经验的 C 开发人员 他无法回答以下问题 C 中派生类析构函数是否需要调用基类析构函数 显然答案是不 C 无论如何都会自动调用基类析构函数 但是如果我们尝试拨打电话怎么办 在我看来 结果将取决于基类析构函数是否可以被
  • 如何截取 Android 布局的屏幕截图?

    我的问题是如何使用内置屏幕截图来截取屏幕截图 任何提示或示例代码将不胜感激 有两种方法你可以尝试 使用Eclipse 在 Eclipse 中打开 设备 视图 窗口菜单 gt 显示视图选项 gt 其他 Android gt 设备 右侧有一个工
  • 如果将 ImageResizer 与 Azure blob 一起使用,我是否需要 AzureReader2 插件?

    我正在开发一个个人项目来管理我的俱乐部的用户 它托管在免费的 Azure 包上 至少目前如此 部分作为试用 Azure 的实验 创建他们的记录的一部分是添加照片 因此我有一个联系人卡片视图 可以让我看到他们是谁 他们何时来以及一张照片 我已
  • 我应该尽可能避免使用 JS 而使用 CSS 吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在寻找最佳实践答案 目前我正在尝试向我网站的导航栏添加一个下拉菜单 我发现我可以使用 CSS 来做到这一点 而且我也可以使用 JS Angular 来做到这一点 我读到过 因为使用 J
  • 使用 Selenium 将元素滚动到视图中

    Selenium 1 x 或 2 x 中是否有任何方法可以滚动浏览器窗口 以便 XPath 标识的特定元素位于浏览器的视图中 Selenium 中有一个 focus 方法 但在 FireFox 中似乎没有物理滚动视图 有人对如何做到这一点有
  • D3.js 如何将力布局的节点排列在圆上

    我开发了一种力量布局来代表社会群体之间的关系 现在我想让节点分布在一个圆圈中 并有链接连接它们 做这个的最好方式是什么 完整版本的代码 没有数据 在这里http jsfiddle net PatriciaW zZSJT 为什么我也必须在这里
  • UICollectionView 和补充视图崩溃

    我有一个 UICollectionView 工作正常 有 2 种方法可以到达此页面 虽然应用程序 点击推送通知 除了一种情况外 一切都很好 如果用户正在聊天 然后退出应用程序 主页按钮 然后他收到一条推送通知 按下它 应用程序崩溃了 cra
  • Matlab - 如何以函数内的字符串形式检索函数调用的确切参数列表?

    假设我有以下功能 function name the paramlist varargin Print out varargin exactly how it is called as a string 基本上我想要它做的是 调用 name
  • 运行 pyinstaller 时出错(1920,“LoadLibraryEx”,“系统无法访问该文件”)

    我试图将我的 python 脚本编译为 exe 以便我可以将其发送给可以使用而无需安装 python 的朋友 但我遇到了问题并且无法找到解决方案 我发现了类似的问题Pyinstaller win32ctypes pywin32 pywint
  • 单击按钮时将道具传递给另一个组件

    在我的 nextJS 应用程序中 我想将一个组件的 props 传递给另一个组件 该组件既不是第一个组件的父组件 也不是第一个组件的子组件 我该怎么做 有一个Orderdiv 内的组件Orders页面和OrderViewer在另一个 div
  • 用 Monadic 咒语召唤 JQuery Deferred

    灵感来自this 优秀 关于在 javascript 中使用 Promises 的讨论 我正在尝试弄清楚如何使用 Deferred 将异步和非异步函数链接在一起 以避免在使用我的 时支付回调税全局存储 code 我有一些与此相关的问题 但我
  • 我如何知道 AppDelegate 中的方向发生了变化

    设备如何知道方向变化的功能是 void viewWillLayoutSubviews 和 void viewDidLayoutSubviews 但是 它们只是在控制器中 现在我想知道是否有类似的函数可以知道文件 AppDelegate m
  • 如何使用 Elixir/phoenix 从 csv 文件导入用户?

    我有一个包含用户列表的 csv 文件以及 UserController 内的以下导入方法 我想通过使用表单提交 csv 文件来导入这些用户 看来我做错了 用户控制器 def import conn user gt user params d
  • 在 Windows Phone 8 上启动 PDF 阅读器

    我正在尝试使用下面的代码启动 pdf 阅读器 但它不起作用 有人可以帮助我吗 private async Task
  • 如何使用 angular2 http API 跟踪上传/下载进度

    因此 有许多临时库支持 Angular2 中的上传 下载进度 我不知道如何使用本机 Angular2 http api 在上传 下载时显示进度 我想使用原生http api的原因是因为我想利用 围绕本机 http api 的 http 拦截
  • 如何在 Java 中从 SQL*Plus 以“SYS”身份连接到 Oracle

    我想连接到 Oracle 作为SYS来自 Java 中的 SQL Plus 但我无法连接 但我能够以名为的用户进行连接SCOTT 我的代码片段如下 public static void test script String fileName
  • Eclipse 表单部分工具栏中的切换按钮

    如何在 Eclipse UI Forms 的部分工具栏中实现切换按钮 如下图所示 我只找到向部分工具栏添加操作的示例 我认为关键是 IAction AS CHECK BOX toggleBotton new Action Messages
  • 使用附加构建器的导航栏上的 Firefox 扩展图标

    如何向 Firefox 添加一个图标 单击导航栏即可打开一个面板 Firebug 扩展就是一个例子 唯一不同的是我希望出现一个面板 Thanks 您可能想使用或查看此工具栏按钮库 https builder addons mozilla o
  • 如何渲染 DotML

    如何将 DotML 渲染成图表 据网站介绍here 从数据中获取图表需要三个步骤 首先 生成或手动键入包含 DotML 元素的 gt XHTML 或任何其他 XML 文件 Use http www martin loetzsch de DO
  • cout 语句中的调用顺序说明,后缀与前缀

    当我在打印测试时注意到实际值输出中出现意外情况时 我正在重载后缀和前缀 运算符并测试它们 作为示例 这是一个整数测试 int i 0 cout lt lt before prefix lt lt i lt lt prefixing lt l