扭曲的C ++代码

可能重复:未定义的行为和顺序点

 #include< iostream.h>
 int main()
 {
       int i=7,j=i;
       j=(i++,++i,j++*i);
       cout <<j;
       return 0;
 }

什么是C ++代码的输出?

这是我的教授给我的作业。


有时通过用几个编译器编译程序并观察结果,有助于说服那些不相信这个不确定的人:

修复iostream.h错误后,

  • g ++ 4.5.2打印64
  • CLang ++ 2.8打印63
  • Sun C ++ 5.8打印63
  • MSVC 2010打印64
  • (哦,并且重写为使用CI / O,Unix 7上的原始K&R C编译器打印63)


    [编辑以解释OP更改编辑的问题]:

    对于输出的结果是不确定的。


    代码中存在以下错误:

    #include <iostream.h>应该是#include <iostream>

    j是未初始化的,所以j++*i的值是未知的 - 好的,这在编辑中得到了修复,

    此外,这项任务本身并不合适。 曲线可以改写为:

    i++;
    ++i;
    j = j++ * i;
    

    由于这里描述的原因,最后一部分是无效的:

    未定义的行为和顺序点

    链接地址: http://www.djcxy.com/p/73233.html

    上一篇: Twisted C++ code

    下一篇: Sequence Points vs Operator Precedence