50米深蓝
C++博客 | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理
re: 初来乍到 50米 2005-12-26 15:04
呵呵顺序点的情况估计不少人都没有听过吧,^_^托大了呵呵:)

下面举例说明吧呵呵。
int m=1;
int n;
n=m++ + m++;
请回答结果是多少?

正确回答是:不知道!语言没有规定它应该算出什么,结果完全依赖具体系统在具体上下文中的具体处理。其中牵涉到运算对象的求值顺序和变量修改的实现时刻问题

a = 4; cout << a++ << a;

这种东西根本不该写,讨论其效果没有意义。

我们知道它是
(cout.operator <<(a++)).operator << (a);
的简写。先看外层函数调用,这里需要算出所用函数(由加下划线的一段得到),还需要计算a 的值。语言没有规定哪个先算。如果真的先算函数,这一计算中出现了另一次函数调用,在被调函数体执行前有一个顺序点,那时a++ 的副作用就会实现。如果是先算参数,求出a 的值4,而后计算函数时的副作用当然不会改变它(这种情况下输出两个4 )。当然,这些只是假设,实际应该说的是:这种东西根本不该写,讨论其效果没有意义。


程序语言通常都规定了执行中变量修改的最晚实现时刻(称为顺序点、序点或执行点)。程序执行中存在一系列顺序点(时刻),语言保证一旦执行到达一个顺序点,在此之前发生的所有修改(副作用)都必须实现(必须反应到随后对同一存储位置的访问中),在此之后的所有修改都还没有发生。在顺序点之间则没有任何保证。对C/C++ 语言这类允许表达式有副作用的语言,顺序点的概念特别重要。
随笔:1 文章:2 评论:2 引用:0
<2025年5月>
日一二三四五六
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

留言簿(1)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案(1)

  • 2005年12月 (1)

文章分类(2)

  • C++(1) (rss)
  • 随笔(1) (rss)

文章档案(2)

  • 2005年12月 (2)

50米深蓝

  • 50米深蓝

最新随笔

  • 1. 垫片类(自我的解释)

搜索

  •  

积分与排名

  • 积分 - 974
  • 排名 - 2383

最新随笔

  • 1. 垫片类(自我的解释)

最新评论

  • 1. re: 垫片类(自我的解释)
  • 谢谢,略微明白了,但LZ没有说明"什么是垫片类",SHIM CLASS 只能用来进行格式转换吗?还是范指一类这种功能的类,本人C++初学者,望指教
  • --tt
  • 2. re: 垫片类(自我的解释)
  • 评论内容较长,点击标题查看
  • --小明

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 50米