C ++代码的意外输出。有人解释一下吗?

时间:2014-03-04 23:04:27

标签: c++

我在进行随机搜索时遇到了这段代码,我虽然在www.ideone.com上执行它,输出结果为0而我期望它是10。

#include <iostream>
using namespace std;

int main() {


    int count = 0; 
for(int i=0; i < 10; ++i) 
 count = count++; 

std::cout << count; 
    return 0;
}

就我的理解而言,count = count++;可以假设为count = count;count = count + 1;所以输出不应该是10而不是0?这种行为的原因是什么? ?

注意:正如这里的评论指出的那样,这个问题来自“未定义的行为和序列点”,我想清楚地表明,因为我是C ++的新手,所以我没有知道这些都是未定义的行为。所以,我希望每个人都会原谅我的错误。

4 个答案:

答案 0 :(得分:4)

问题在于count = count++;。有关错误的详细描述,请阅读Undefined behavior and sequence points

基本上,您会遇到首先评估的问题,count运算符对=的分配或count运算符对++的分配。如果它首先从++运算符评估赋值,那么您将得到0.如果它在=的赋值之前评估++,那么您将得到10。

答案 1 :(得分:0)

AFAIR这是一种未指明的行为,结果可能因编译器而异。

答案 2 :(得分:-1)

你可以使用count ++;它会增加。计数++;相当于count = count + 1;

答案 3 :(得分:-1)

执行此操作时:

count = count++; 

此时您基本上为count创建了一个新值。右侧的count++现在被视为右值,而count的新值是count++中的最后一个值。即0