问题描述:
#include<iostream>
using namespace std;
void main ()
{
int i=4;
cout<<i++<<","<<i<<","<<i++<<","<<++i<<","<<i++;
}
不是哪个书上的题目
我自己瞎想出来
运行了一下结果有点出乎意料
环境是v studio
求结果
与分析过程
我自己理论推出结果是
7,7,6,6,4
也就是说变成7 8 6 8 4
是因为我机器设置上的问题对么?
Sadusaga 你好:
“至于结果不同就是<< 在各个机器上的实现不同。”
“至于结果依据工程设置和STL库的具体实现会有不同。”
能详细解释一下好么?
或者推荐下这方面的书?
我会提高悬赏的哈
谢谢大家了
问题解答:
++在左侧,则先加一后取值,右面,则先取之后加一。
而且这里的<< 的顺序需要确定,如果是从右往前是一个结果,反之相反。
补充:
至于结果依据工程设置和STL库的具体实现会有不同。
我的运行结果是 7,7,6,6,4
原理是我说过的原理。
至于结果不同就是<< 在各个机器上的实现不同。
补充:
如果运算符没有问题的话,那你提出的问题就在于iostream中<<这里面做了什么。
_Myt& operator<<(int _X)
{iostate _St = goodbit;
const sentry _Ok(*this);
if (_Ok)
{const _Nput& _Fac = _USE(getloc(), _Nput);
fmtflags _Bfl = flags() & basefield;
long _Y = (_Bfl == oct || _Bfl == hex)
? (long)(unsigned int)_X : (long)_X;
_TRY_IO_BEGIN
if (_Fac.put(_Iter(rdbuf()), *this,
fill(), _Y).failed())
_St |= badbit;
_CATCH_IO_END }
setstate(_St);
return (*this); }
这段代码是<<的实现,要搞明白结果,你去仔细调试一下这段代码。会受益匪浅的。
没经过验算试着回答一下:
4,5,5,6,6
经过验证,输出是
7,8,6,8,4
是右运算?不懂
7,7,6,6,4
<< 是右运算符