我在进行随机搜索时遇到了这段代码,我虽然在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 ++的新手,所以我没有知道这些都是未定义的行为。所以,我希望每个人都会原谅我的错误。
答案 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