Alo*_*ave 8 c++ sequence-points
最近,我已经看到很多关于输出的问题,一些疯狂但语法上允许的代码语句就像是i = ++i + 1和i=(i,i++,i)+1;.实际上坦率地说,几乎没有人在实际编程中编写任何这样的代码.坦率地说,我从未在我的专业经验中遇到任何这样的代码.所以我通常最终会在SO上跳过这些问题.但是最近这种问题的绝对数量让我想到如果我错过了一些重要的理论,就是跳过这样的问题.我认为这样的Q围绕着Sequence points.我几乎不知道序列点是坦率的,我只是想知道如果不知道它在某种程度上是一个障碍.那么有人可以解释一下理论/概念Sequence points,或者如果可能的话,指向解释该概念的资源.此外,是否值得花时间了解这个概念/理论?
我能想到的最简单的答案是:
C++是根据抽象机器定义的.在抽象机器上执行的程序的输出仅根据执行"副作用"的顺序来定义.副作用定义为对IO库函数的调用,以及对标记为volatile的变量的更改.
允许C++编译器在内部做任何他们想做的事情来优化代码,但它们不能改变写入volatile变量和io调用的顺序.
序列点定义了c/c ++程序的心跳 - 在序列点"完成"之前的副作用,并且序列点之后的副作用尚未发生.但是,副作用(或者可以间接影响副作用的代码(在序列点内)可以重新排序.
这就是为什么理解它们很重要.如果没有这种理解,你对c ++程序的基本理解(以及如何通过激进的编译器进行优化)是有缺陷的.
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |