作者:brucegogo03 | 来源:互联网 | 2023-01-04 14:05
我仍然试图进入C++,我编写了这段代码:
#include
using namespace std;
int main()
{
cout <<" "<
输出是:
1Hello world!
为什么在Hello World之前有1?
编辑:我的程序确实编译,似乎我有一个旧的编译器版本.
1> templatetype..:
对您的问题的简短回答是,您用于输出数据的语法略有偏差.如果将一堆输出语句链接在一起,那么惯例就是将流放在最左边而不重复它.所以而不是写作
cout <<" " <
写吧
cout <<" "<
你在1
这里看到的原因有点技术性.流类型都提供了一个重载的运算符,您可以使用它来测试流是否有效.例如,你可以写这样的东西:
if (cout) {
// Everything is okay!
} else {
// I don't know how you did it, but you broke cout and you can
// no longer write anything to it!
}
(这通常用于输入流,但输出流也支持这一点).作为这种语法的结果,如果您尝试插入cout
输出流,C++将首先尝试转换cout
为布尔值并改为打印该值.默认情况下,布尔值打印为1(真)或0(假),因此您看到的1是C++说"是的,此流已启动并正在运行".
(从技术上讲,重载运算符会产生一个void*
而不是一个bool
,但我现在会对这个细节进行掩饰.)
请注意,现代版本的C++(C++ 11和转发版)不支持此行为,如果您尝试使用现代编译器执行此操作,则实际上会遇到编译器错误.如果可能的话,我建议升级你的编译器版本,这会给你一个错误,而不是生成不符合你的想法的代码.