【发布时间】:2017-01-19 15:38:17
【问题描述】:
为什么下面程序的输出是这样的?
#include <iostream>
using namespace std;
int main(){
cout << "2+3 = " <<
cout << 2 + 3 << endl;
}
生产
2+3 = 15
而不是预期的
2+3 = 5
这个问题已经经历了多次关闭/重新打开循环。
在投票结束之前,请考虑this meta discussion 关于此问题。
【问题讨论】:
-
您希望在第一行输出的末尾使用分号
;,而不是<<。你没有打印你认为你正在打印的东西。你正在做cout << cout,它打印1(我认为它使用cout.operator bool())。然后5(来自2+3)紧随其后,使其看起来像数字十五。 -
@StephanLechner 那可能是在使用 gcc4。在 gcc5 之前,它们没有完全兼容的流,特别是在此之前它们仍然具有隐式转换。
-
@IgorTandetnik 这听起来像是答案的开始。这个问题似乎有很多微妙之处,在第一次阅读时并不明显。
-
为什么人们一直投票结束这个问题?不是“请告诉我这段代码有什么问题”,而是“为什么这段代码会产生这个输出?”第一个的答案是“你打错了”,是的,但是第二个需要解释编译器如何解释代码,为什么它不是编译器错误,以及它如何得到“1”而不是指针地址。
-
@jaggedSpire 如果不是印刷错误,那么这是一个非常糟糕的问题,因为它故意使用了一个看起来像印刷错误的不寻常结构,而没有指出这是故意的。无论哪种方式,都值得一票。 (由于印刷错误或不良/恶意。这是一个寻求帮助的人的网站,而不是试图欺骗他人的人。)
标签: c++