C++代码的意外输出.有人可以解释一下

An unexpected output for C++ code.Can someone explain?

本文关键字:解释 一下 代码 意外 输出 C++      更新时间:2023-10-16

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

有问题的行是 count = count++; 。 有关错误内容的荒谬详细描述,请阅读未定义的行为和序列点。

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

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

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

当你这样做时:

count = count++; 

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