c – cout中的后增量行为
参见英文答案 >
Why are these constructs using pre and post-increment undefined behavior?????????????????????????????????????14个
#include <iostream> using namespace std; main(){ int i = 5; cout << i++ << i--<< ++i << --i << i << endl; } 用g编译的上述程序给出了输出: 45555 而以下程序: int x=20,y=35; x =y++ + y + x++ + y++; cout << x<< endl << y; 结果为 126 37 任何人都可以解释输出. 解决方法cout << i++ << i-- 在语义上等同于 operator<<(operator<<(cout,i++),i--); <------arg1--------->,<-arg2->
C 0x: 这意味着对参数arg1 / arg2的评估未被排序(它们都没有在另一个之前排序). 标准草案中的同一部分也指出,
现在,在下面的完整表达式末尾的分号处有一个序列点 operator<<(operator<<(cout,i--); ^ the interesting sequence point is right here 很明显,对arg1和arg2的评估都会对标量变量’i’产生副作用,正如我们上面所看到的,副作用是没有顺序的. 因此代码具有未定义的行为.那是什么意思呢? 以下是标准中“未定义行为”的定义方式:).
您是否看到与@ DarkDust响应的关联’甚至允许编译器将您的计算机置于火上:-)’ 因此,从这样的代码中获得的任何输出实际上都处于未定义行为的可怕领域. 不要这样做. 关于此类代码的唯一定义是它有助于OP和我们许多人获得大量投票(如果回答正确):) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |