VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 135|回复: 5

[已解决]c++中关于++i与i++的疑惑不解

[复制链接]
18_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-4 09:07:04 | 显示全部楼层 |阅读模式
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int x = 1;
  6.         x = (x++) + (++x);
  7.         cout << x << endl;
  8.         int y = 1;
  9.         cout << (y++) + (++y) << endl;
  10. }
复制代码

我用vs2013编译,输出是5和4。这有点想不通。5是怎么算出来的。
还有cout << (y++) + (++y) ,是cout<<1+3吗?还是cout<<2+2呢?

最佳答案
51_avatar_small
2020-4-4 13:42:17
张小顺 发表于 2020-4-4 12:27
还是没想明白。
比如
int z,x;

类似这样的题目就是考运算符的优先级,这块如果单纯这么看也不太容易发现问题,帮楼主写了一个 CNumber 的类,重载了 前置++、后置++、+号运算符,之后得到的结果也是 5 和 4,不过这样的话楼主就可以 F11 调试下看看到底是先执行的哪个,后执行的哪个了!

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;

  4. class CNumber
  5. {
  6. public:
  7.         CNumber(int va)
  8.         {
  9.                 m_va = va;
  10.         };
  11.         ~CNumber(){};

  12.         CNumber & operator++() //用于前置++形式
  13.         {
  14.                 m_va++;
  15.                 return *this;
  16.         }
  17.         CNumber operator++(int) //用于后置++形式
  18.         {
  19.                 CNumber tmp(*this); //记录修改前的对象
  20.                 m_va++;
  21.                 return tmp; //返回修改前的对象
  22.         }


  23.         CNumber operator+(const CNumber &others)
  24.         {
  25.                 CNumber s1(0);
  26.                 s1.m_va = this->m_va + others.m_va;
  27.                 return s1;
  28.         }

  29.         int get()
  30.         {
  31.                 return m_va;
  32.         }

  33. private:
  34.         int m_va;
  35. };

  36. int main()
  37. {
  38.         CNumber x(1);
  39.         x = (x++) + (++x);
  40.         cout << x.get() << endl;
  41.         int y = 1;
  42.         cout << (y++) + (++y) << endl;

  43.         return 0;
  44. }
复制代码




上一篇:delete要用到什么头文件
下一篇:delete就是无法正常执行
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-4-4 10:09:45 | 显示全部楼层
++i是先加1操作,i++是执行完该条执行在加1操作,
98_avatar_middle
最佳答案
0 
在线会员 发表于 2020-4-4 11:59:27 | 显示全部楼层
(y++)    +  (++y)
值2,y2     值2,y3
x = (x++) + (++x)
       x2          x3
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-4 12:27:15 | 显示全部楼层
tomok 发表于 2020-4-4 11:59
(y++)    +  (++y)
值2,y2     值2,y3
x = (x++) + (++x)


还是没想明白。
比如
int z,x;
那么
x=1;
z= (x++) + (++x);
这与
x=1;
x= (x++) + (++x);
为什么zx结果就不一样了呢。。。
51_avatar_middle
最佳答案
82 
online_admins 发表于 2020-4-4 13:42:17 | 显示全部楼层    本楼为最佳答案   
bestAnswer
张小顺 发表于 2020-4-4 12:27
还是没想明白。
比如
int z,x;

类似这样的题目就是考运算符的优先级,这块如果单纯这么看也不太容易发现问题,帮楼主写了一个 CNumber 的类,重载了 前置++、后置++、+号运算符,之后得到的结果也是 5 和 4,不过这样的话楼主就可以 F11 调试下看看到底是先执行的哪个,后执行的哪个了!

  1. #include <string>
  2. #include <iostream>
  3. using namespace std;

  4. class CNumber
  5. {
  6. public:
  7.         CNumber(int va)
  8.         {
  9.                 m_va = va;
  10.         };
  11.         ~CNumber(){};

  12.         CNumber & operator++() //用于前置++形式
  13.         {
  14.                 m_va++;
  15.                 return *this;
  16.         }
  17.         CNumber operator++(int) //用于后置++形式
  18.         {
  19.                 CNumber tmp(*this); //记录修改前的对象
  20.                 m_va++;
  21.                 return tmp; //返回修改前的对象
  22.         }


  23.         CNumber operator+(const CNumber &others)
  24.         {
  25.                 CNumber s1(0);
  26.                 s1.m_va = this->m_va + others.m_va;
  27.                 return s1;
  28.         }

  29.         int get()
  30.         {
  31.                 return m_va;
  32.         }

  33. private:
  34.         int m_va;
  35. };

  36. int main()
  37. {
  38.         CNumber x(1);
  39.         x = (x++) + (++x);
  40.         cout << x.get() << endl;
  41.         int y = 1;
  42.         cout << (y++) + (++y) << endl;

  43.         return 0;
  44. }
复制代码
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-4-4 14:47:11 | 显示全部楼层
Syc 发表于 2020-4-4 13:42
类似这样的题目就是考运算符的优先级,这块如果单纯这么看也不太容易发现问题,帮楼主写了一个 CNumber  ...

看您的课,还没有学到类。代码先留下了。等到以后学到了类,再研究。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-11-1 06:47

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表