为什么打印的是 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++ 之前,分列进行或交换位置应该可以解决问题
#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++ 之前,分列进行或交换位置应该可以解决问题