zoukankan      html  css  js  c++  java
  • 关于自增自减

    下 面 的 代 码 int i=7; printf("%d ", i++  * i++); 返回 49?不管按什么顺序计算, 难道不该打印出56吗?


    尽管后缀自加和后缀自减操作符 ++ 和 -- 在输出其旧值之后才会执行运算,
    但这里的“之后”常常被误解。没有任何保证确保自增或自减会在输出变量原值之
    后和对表达式的其它部分进行计算之前立即进行。也不能保证变量的更新会在表
    达式 “完成” (按照 ANSI C 的术语, 在下一个 “序列点” 之前, 参见问题 3.7) 之前
    的某个时刻进行。本例中, 编译器选择使用变量的旧值相乘以后再对二者进行自
    增运算。
    包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多
    个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后
    又被引用的自增, 自减和赋值操作符的任何组合。这是一个粗略的定义; 严格的定
    义参见问题 3.7, “未定义” 的含义参见问题 11.32。) 甚至都不要试图探究这些东
    西在你的编译器中是如何实现的 (这与许多 C 教科书上的弱智练习正好相反); 正
    如 K&R 明智地指出, “如果你不知道它们在不同的机器上如何实现, 这样的无知可
    能恰恰会有助于保护你。”

  • 相关阅读:
    JS 可选链操作符?. 空值合并运算符?? 详解,更精简的安全取值与默认值设置小技巧
    手写一个 Promise
    Leetcode 403 青蛙过河 DP
    Leeetcode 221 最大正方形 DP
    Leetcode 139 单词拆分
    Unity周记: 2021.07.26-08.15
    Unity周记: 2021.07.19-07.25
    Unity周记: 2020.07.12-07.18
    Unity周记: 2020.07.05-07.11
    线性规划
  • 原文地址:https://www.cnblogs.com/chencesc/p/4499850.html
Copyright © 2011-2022 走看看