zoukankan      html  css  js  c++  java
  • (转)后缀++或--何时执行自增或自减操作?(顺序点)

    问:在使用后缀形式的++或--时,何时执行自增或自减操作?

    答:这是一个非常好的问题,也是一个非常难回答的问题。C语言标准引入“顺序点”的概念,并且指出“应该在前一 个顺序点和下一个顺序点之间对存储的操作数的值进行更新”。在C语言中有多种不同类型的顺序点,表 式语句的末尾是其中一种。在表达式语句的末尾,该语句中的所有自增和自减操作都必须执行完毕,否则不能执 行下一条语句。

    一些运算符(逻辑与,逻辑或,条件和逗号)对顺序点也有影响。函数调用也是如此:在函数调用执行之前,所 有的实际参数必须全部计算出来。如果实际参数恰巧是含有++或--运算符的表达式,那么必须在调用前进行自 增自减操作。

    问:C语言为什么提供++和--运算符?它们是比其它的自增,自减方法执行得快,还是仅仅更便捷?

    答:C语言从ken Thompson早期的B语言中继承了++和--。 Thompson创造这类运算符是因为他的B语言编译器可以 对++i产生比i = i + 1更简洁的翻译。这些运算符已经成为C语言 根深蒂固的组成部分(事实上,许多最著名的 C语言惯用法都依赖于这些运算符)。对于现代编译器而言,使用++和--不会使编译器的程序变得更短小或更 快,继续普及这些运算符主要是由于它们的简洁和便利。

    (摘自 C语言设计现代方法)

    有哪些点是顺序点:

        • ·分号;
        • ·未重载的逗号运算符的左操作数赋值之后(即“,”处);
        • ·未重载的”||”运算符的左操作数赋值之后(即“||”处);
        • ·未重载的“&&”运算符的左操作数赋值之后(即"&&"处);
        • ·三元运算符“? : ”的左操作数赋值之后(即“?”处);
        • ·在函数所有参数赋值之后但在函数第一条语句执行之前;
        • ·在函数返回值已拷贝给调用者之后但在该函数之外的代码执行之前;
        • ·每个基类和成员初始化之后。
  • 相关阅读:
    选择排序--简单(c语言)
    冒泡排序--简单(c++)
    冒泡排序--简单(c语言)
    直接插入排序--简单(c++)
    Microsoft Azure File 服务简介
    【 D3.js 选择集与数据详解 — 1 】 使用datum()绑定数据
    物联网操作系统HelloX V1.77(beta)版本发布
    对XX证券报关于物联网操作系统的几个问题的答复
    使用 Azure Site Recovery 将内部部署虚拟化工作负荷迁移至 Azure
    使用 Azure Site Recovery 灾难恢复至 Azure 的功能现已正式发布
  • 原文地址:https://www.cnblogs.com/fFaXzz/p/4909728.html
Copyright © 2011-2022 走看看