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

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

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

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

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

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

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

    有哪些点是顺序点:

        • ·分号;
        • ·未重载的逗号运算符的左操作数赋值之后(即“,”处);
        • ·未重载的”||”运算符的左操作数赋值之后(即“||”处);
        • ·未重载的“&&”运算符的左操作数赋值之后(即"&&"处);
        • ·三元运算符“? : ”的左操作数赋值之后(即“?”处);
        • ·在函数所有参数赋值之后但在函数第一条语句执行之前;
        • ·在函数返回值已拷贝给调用者之后但在该函数之外的代码执行之前;
        • ·每个基类和成员初始化之后。
  • 相关阅读:
    scikitlearn中predict_proba用法 (与predict的区别)
    Sklearn,TensorFlow,keras模型保存与读取
    TensorFlow GPU 的使用
    Keras2.2 predict和fit_generator的区别
    wordcloud词云可视化
    使用scp命令,远程上传下载文件/文件夹
    L0/L1/L2范数的联系与区别
    Python中的正斜杠/与反斜杠\
    在Keras中使用tensorboard可视化acc等曲线
    Linux终端没有GUI,使用matplotlib绘图
  • 原文地址:https://www.cnblogs.com/fFaXzz/p/4909728.html
Copyright © 2011-2022 走看看