VC++慎用错误之3---1行不认的,必须分2行写

本文深入探讨了C++编程中常见错误之一——使用++运算符可能导致的混淆和误解。通过实例分析,本文详细解释了在使用整型变量和CString对象时,++运算符的正确使用方式和潜在陷阱。同时,提供了避免此类错误的建议,并强调了在特定操作中的注意事项。

VC++慎用错误之3---1行不认的,必须分2行写

-----------本文分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都编译一下,会看到各种不同结果.

测试了一下:不过结果一样,不过这个因素也是存在的.
这种东西是歧义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值