(急) c++ 自增运算问题,求助

Edwin603 2012-12-13 11:15:43
nt main()
{
int ct = 0;

for(int i=0;i<10;i++){
ct = ct++;
}
cout<<ct<<endl;

return 0;
}

今天和一哥们打赌,我不是写c++的,所以想知道答案各位 这个结果是多少,请告诉我缘由,
...全文
155 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
formydream1 2012-12-13
  • 打赏
  • 举报
回复
你的这个结果不是10,而应该是0,楼上几位的理解都错了 首先,后置自增运算符的优先级高于赋值运算符,所以先进行后置自增运算ct++; ct++这个运算可以理解为如下步骤: int temp = ct; ct += 1; return temp; 然后,进行赋值运算符操作,也即 ct = temp = ct(未加1);所以每次操作后,ct的值不变 所以最终的结果是0。 如果想得到结果为10,把ct = ct++;改为 ct = ++ct;
BadPattern 2012-12-13
  • 打赏
  • 举报
回复
What's the value of i++ + i++? It's undefined. Basically, in C and C++, if you read a variable twice in an expression where you also write it, the result is undefined. Don't do that. 原理跟这里类似
BadPattern 2012-12-13
  • 打赏
  • 举报
回复
详细的我解释我不是贴出来了嘛: http://bbs.csdn.net/topics/370153775
Edwin603 2012-12-13
  • 打赏
  • 举报
回复
引用 5 楼 dr8737010 的回复:
“C/C++ 语言的规定告诉我们,任何依赖于特定计算顺序、依赖于在顺序点之间实现修改效果的表达式,其结果都没有保证。”
能在详细点么,为什么苹果的xCode编译后结果是0
CALYCL 2012-12-13
  • 打赏
  • 举报
回复
10 初始值ct=0,i=0,当i<10的时候,ct自增1,之后i自增1,如此循环,直到i=10的时候,跳出循环,输出ct的值
Edwin603 2012-12-13
  • 打赏
  • 举报
回复
为什么苹果的xCode编译后结果是0
BadPattern 2012-12-13
  • 打赏
  • 举报
回复
“C/C++ 语言的规定告诉我们,任何依赖于特定计算顺序、依赖于在顺序点之间实现修改效果的表达式,其结果都没有保证。”
dhdahai 2012-12-13
  • 打赏
  • 举报
回复
10 反正是自己给自己赋值 效果等同

int main()
{
    int ct = 0;

    for(int i=0;i<10;i++){
      ct++;
    }
    cout<<ct<<endl;

    return 0;
}
__天涯寻梦 2012-12-13
  • 打赏
  • 举报
回复
ct = ct++; 就等于 ct = ct; ct = ct + 1; 结果就是10
BadPattern 2012-12-13
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/370153775
BadPattern 2012-12-13
  • 打赏
  • 举报
回复
貌似又是类似于月经贴的
  • 打赏
  • 举报
回复
这个CSDN里面早就讨论过了,搜搜以前的帖子,属于未定义行为,依赖于编译器,不同编译器有不同的结果。
赵4老师 2012-12-13
  • 打赏
  • 举报
回复
VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 提醒: “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 (Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)” 不是一回事! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
kingdom_0 2012-12-13
  • 打赏
  • 举报
回复
引用 楼主 Edwin603 的回复:
nt main() { int ct = 0; for(int i=0;i<10;i++){ ct = ct++; } cout<<ct<<endl; return 0; } 今天和一哥们打赌,我不是写c++的,所以想知道答案各位 这个结果是多少,请告诉我缘由,
和具体是不是搞C++的无关,java,C#上运行结果一直,都是10 如果 i = 0 ct = ct++;(后置运算,ct = ct = 0,然后自增 ct = 1) 以此类推,当i = 9 ct = 10

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧