(转)后缀++或--何时执行自增或自减操作?(顺序点)

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

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

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

 

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

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

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

 

有哪些点是顺序点:

 

      • ·分号;
      • ·未重载的逗号运算符的左操作数赋值之后(即“,”处);
      • ·未重载的”||”运算符的左操作数赋值之后(即“||”处);
      • ·未重载的“&&”运算符的左操作数赋值之后(即"&&"处);
      • ·三元运算符“? : ”的左操作数赋值之后(即“?”处);
      • ·在函数所有参数赋值之后但在函数第一条语句执行之前;
      • ·在函数返回值已拷贝给调用者之后但在该函数之外的代码执行之前;
      • ·每个基类和成员初始化之后。

转载于:https://www.cnblogs.com/fFaXzz/p/4909728.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值