为什么打印的是 16 而不是 17 并且变量没有递增?

Why is 16 printed instead of 17 and the variable not incremented?

#include<iostream.h>
void main()
{
    int A=5,B=10;
    for(int I=1;I<=2;I++)
    {
        cout<<"Line1="<<A++<<"&"<<B-2<<endl;
        cout<<"Line2="<<++B<<"&"<<A+B<<endl;
    }
}

这个程序的输出是

Line1=5&8
Line2=11&16
Line1=6&9
Line2=12&18

我认为它会产生 17 和 19 来代替输出的第二行和第四行中的 16 和 18。这是因为,在循环的第一个 运行 中,首先 A 的值为 5,第一个命令打印 5&8 并且应该将 A 的值增加 1,使其成为 6。在第二个命令中它应该打印11&(6+11) 应该打印 11&17 但输出不是那样。

我推理的漏洞在哪里??

我不是这方面的专家,但我相信这是因为在后台执行的操作顺序。

主要是“<<”是一种叫做重载运算符的东西,它基本上意味着某人在某个地方写下了它应该做什么,以及如何去做。 如果你有一堆东西一个接一个地写,比如你有:

cout<<"Line2="<<++B<<"&"<<A+B<<endl;

编译器必须做一些花哨的技巧才能使其工作。 程序运行此类代码的方式是从右到左。 所以从本质上讲,它的运行方式与您认为的相反。 首先它压入 endl,然后它做 A+B 并压入它,然后它压入 &,然后它递增 B 并且它也压入它,最后它压入 Line2= 形成完整的 "sentence"。然后将这些内容带到控制台(或您可能拥有的任何其他东西)以立即打印到您的屏幕上。

作为问题的解决方案,尝试将 cout 分成 2 行;像这样:

cout <<"Line2="<<++B<<"&";
cout <<A+B<<endl;

或者,如果允许的话,尝试交换 ++B 和 A+B,这应该也能解决问题,但是您的结果也会相反。

cout<<"Line2="<<A+B<<"&"<<++B<<endl;

tl;dr:A+B 发生在 B++ 之前,分列进行或交换位置应该可以解决问题