顺序点

        论坛里看到关于表达式关于表达式求值顺序的讨论,在网上查阅资料,看论坛里别人的想法,学到了东西,把学到的整理一下思路

有这样一段代码

      cout  << a++ << a;

      输出结果前者和后者是相同的。如果单独依据我对“++”的理解,在前者是输出a,后者输出的则是a+1。为何现在的结果不同呢?我们由此引出关于顺序点的讨论

顺序点的定义:程序执行中变量修改的最晚实现时刻称为顺序点(又称为序点和执行点)。

它的效果在程序中一个语句到达它的的顺序点时,语句对于变量的修改都必须实现,但是在这个途中的时候是否实现是不能保证的。就好似你要求一个装热水器的必须在某个时间点装上,但是在这个时间点以前,你家里依然可能是没有装热水器的。C/C++ 语言的规定告诉我们,任何依赖于特定计算顺序、依赖于在顺序点之间实现修改效果的表达式,其结果都没有保证。就好像我们上面所说的代码一样。

顺序点的位置在哪
 1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式);
 2. 运算符 &&、||、?: 和逗号运算符的第一个运算对象计算之后;
 3. 函数调用中对所有实际参数和函数名表达式(需要调用的函数也可能通过表达式描述)的求值完成之后(进入函数体之前)。

如果认为我表述的还不是很清楚,可以阅读一下我看的参考资料

参考资料:

 百度文库  http://wenku.baidu.com/link?url=igJXEcQrkx3UIf0dIB0DWb6Fo6RVO8IwEK3ffAX874u9cbjEZVx-U_XpXFYQKt830P4LMks0tM6UbmxzeJW9P9c1qmcbH-mAm3FHDRnrku_


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值