有点意思: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
---