首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有点意思:cout << "s[" << pos << "] = " <<

2012-03-14 
有点意思:cout s[ pos ] s[pos++] endl测试环境win_xp,vs_2005代码:strings( ab2

有点意思:cout << "s[" << pos << "] = " << s[pos++] << endl;
测试环境   win_xp,   vs_2005
代码:
string   s( "ab2c3d7R4E6 ");
string   number( "1234567890 ");
string::size_type   pos   =   0;

                  //   <1>
while   ((pos   =   s.find_first_of(number,   pos))   !=   string::npos)
{
cout   < <   "s[ "   < <   pos   < <   "]   =   "   < <   s[pos]   < <   endl;
pos++;
}
----------------------------------------------------
                  <2>
                  while   ((pos   =   s.find_first_of(number,   pos))   !=   string::npos)
{
cout   < <   "s[ "   < <   pos   < <   "]   =   "   < <   s[pos++]   < <   endl;
}
=============================================
<1> , <2> 的结果居然不一样,  
<1> 的结果是正确的,显示的第一个循环是   s[2]   =   2;
而 <2> 的结果是   s[3]   =   2;
----------
这样说来..cout   < <   的运算顺序好像是先做了   pos++,   然后又做的s[pos]中的pos
...呵呵...有点意思
突然记起一句话,是那本书上来着,说不要把   pos,   pos++,pos--等放入一行,防止未知的结果....

大家讨论下..


[解决办法]
凡有++/--的变量,不要在同一行里出现2次。
求值顺序不确定。
[解决办法]
cout < < "s[ " < < pos < < "] = " < < s[pos++] < < endl;

cout < <返回ostream&,从右往左,
具体也跟编译器有关
[解决办法]
这年头,编译器也会有自己的一点小标准的……
[解决办法]
典型的参数变量入栈问题
C语言标准没有规定函数参数的入栈顺序
所以出现所说的 各种编译器得出的结果不一致的情况
根据你的情况,正确理解是
首先将s[pos++]入栈 根据优先级 将s[pos]入栈 执行pos++
再将pos入栈
那么结果
s[1]=a
s[2]=b
s[3]2
---

热点排行
Bad Request.