首页 > 解决方案 > 为什么函数中b的第一个打印语句打印的是5而不是6?

问题描述

我很困惑。我希望函数中的第一个打印语句会打印 6 而不是 5。因为 a++ + c++ = (1+1) + (3+1) = (2+4 = 6)。

#include <iostream>
#include <string>

int main()
{
    int a = 1;
    int b = 2;
    std::cout << "intitialisation b:"<< b << std::endl;
    int c = 3;
    {
        auto b = ++a + c++;
        std::cout << "increment b in function:" << b << std::endl;
        auto e = b;
        c += ++b;
        std::cout << "increment b in function:" << b << std::endl;
    }
    std::cout << "increment b out function:" << b << std::endl;
    int* p = &a;
    int* q = &b;
    std::cout <<"value pointer:" << *q << std::endl;
    ++(*q);
    std::cout <<"value pointer:" << *q << std::endl;
    *p += a++ + (*p)++;
}
 
intitialisation b:2
increment b in function:5
increment b in function:6
increment b out function:2
value pointer:2
value pointer:3

纳丁

标签: c++

解决方案


语句的行为

*p += a++ + (*p)++;

未定义的。那是因为您在未排序的步骤中同时读取和写入a(有时通过指针)。

这意味着整个程序是未定义的,也许有点自相矛盾,包括从概念上讲,在该程序之前已经运行的任何语句。这包括您要询问的具体声明!

撇开这一点不谈,++a评估为 的增加值ac++评估为 的未增加值c。因此,如果您的代码中没有未定义的构造,则输出将为 2 + 3,即 5。


推荐阅读