-----------本文分2部分 第1部分:int 第2部分:CString--------------(目前只测试过这2个,也许还有其它的类型-----------
----------------------------------第1部分:int ---------------------------------------
int i=0;
// cout<<i<<i++;//输出10
// cout<<i;cout<<i++;//输出00
----------------------------------第2部分:CString---------------------------------------
CString m_edit1,str;//正确
m_edit1="123";//正确
m_edit1="2"+m_edit1;//正确
str="1"+m_edit1;//正确,虽然str结果是"1"+"2"+"123",但若你真的这样写的话,那就错了
// str="1"+"2"+m_edit1;//错误
-----------------------------------------------测试平台-------------------------------------------------------
win32控制台应用程序(带MFC头文件的那个),因为此处有个CString(包含的头文件是windows.h),在不支持MFC的DOS下,好像不支持CString,但是支持string.h
---------------得出结论:
以后写代码就一行一行写吧.
特别是遇见++或--的,考虑都不要考虑,直接1行1行写.
如果是2个指针相加,考虑都不要考虑.直接1行1行赋值指到字符串,1行1行的加
现在的测试出的就这2个结果,隐藏的不知有多少,指不准哪天又会出现一个,所以安全起见1个1个写.
--------------------------------------------调试代码与讲解------------------------------------------------
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
//////////////////////////int测试部分////////////////////////////
int i=0;
cout<<i<<i++;//输出10
// cout<<i;cout<<i++;//输出00
// int i=1;int j=0;
// cout<<i<<i++<<endl;
// cout<<(i++)+(i++)+(i++)<<endl;
// cout<<((++i)+(++i)+(++i))<<endl;
// j=(++i)+(++i)+(++i);
// cout<<j<<endl;
// cout<<++i<<endl;j=i;
// cout<<++i<<endl;j=j+i;
// cout<<++i<<endl;j=j+i;
// cout<<j<<endl;
// cout<<i<<"分开"<<i++<<endl;//
// printf("%d %d",i++,i);//01
// printf("%d %d",j,j++);//10
// cout<<i<<endl;//<<i++<<endl;//10//cout<<i<<"\n"<<i++<<endl;//printf("%d%d",i,i++);printf("%d%d",i++,i++);
// cout<<i<<i++<<endl;//10
// cout<<i++<<i<<endl;//01//printf("%d%d",i++,i);//01
/* cout<<i;
cout<<i++;
cout<<i;//001,问题锁定在cout<<上,
*/
/* int x=3,y=4;
cout<<x<<y;//34,证明cout<<输出是自左自右,由于是指定的x,y,不像i++那样自增,所以问题锁定在<<输入流上,
// 根据10结果,明显是输入流i++先进入,i后进入,i++进入后马上增1,i在次进入时,i变1---->查找<<资料
C语言中用的是printf,先用原始输出测试printf("%d%d",i,i++);//10,查找prinf资料
//
*/
////////////////////////////////////CString测试部分//////////////////////////////
CString m_edit1,str;//正确
m_edit1="123";//正确
m_edit1="2"+m_edit1;//正确
str="1"+m_edit1;//正确
// str="1"+"2"+m_edit1;//错误
cout<<str;
return 0;
}
-------------------以下是QQ群讨论结果-----
int i=1;
(i++)+(i++)+(i++)与(++i)+(++i)+(++i),在我的机器上得出结果为3与12
前面是i++能理解,后面的12表示++i,3次=3,第4次加上本身的话=4,一共=4+4+4=12
不过讨论的结论是:不同的编译器或平台因素的不同,结果也会不同,遇上这种情况,就是上面的1行1行写
另外讨论的一个结果:
以Debug和Release都编译一下,会看到各种不同结果.
测试了一下:不过结果一样,不过这个因素也是存在的.
这种东西是歧义