为什么这个简单的程序要打印;“你好,世界”吗;? 我仍然试图进入C++,我编写了这个代码: #include <iostream> using namespace std; int main() { cout << " "<< endl << cout << "Hello world!" <<endl; }
为什么在Hello World之前有一个1为什么这个简单的程序要打印;“你好,世界”吗;? 我仍然试图进入C++,我编写了这个代码: #include <iostream> using namespace std; int main() { cout << " "<< endl << cout << "Hello world!" <<endl; },c++,iostream,C++,Iostream,为什么在Hello World之前有一个1 编辑:我的程序是编译的,似乎我有一个旧的编译器版本。对你的问题的简短回答是,你用来输出数据的语法有点不正确。如果将一组输出语句链接在一起,约定是将流放在最左边,并且不重复它。与其写,不如写 cout << " " << endl << cout << "Hello world!" << endl; ~~~~~~~ (这通常用于输入流,但输出流也支
编辑:我的程序是编译的,似乎我有一个旧的编译器版本。对你的问题的简短回答是,你用来输出数据的语法有点不正确。如果将一组输出语句链接在一起,约定是将流放在最左边,并且不重复它。与其写,不如写
cout << " " << endl << cout << "Hello world!" << endl;
~~~~~~~
(这通常用于输入流,但输出流也支持这一点)。作为这种语法的结果,如果您尝试将void*
而不是bool
,但我现在将对该细节进行说明。)
作为一个注释,C++的C++(11和前文)的现代版本不支持这种行为,如果用现代编译器来做这个,实际上会得到编译器错误。如果可能的话,我建议您升级编译器版本,这会给您带来一个错误,而不是生成与您认为的不一样的代码。在我的lapi中,我正在使用代码块并以 0x489944你好,世界 之所以发生这种情况,是因为
cout
是一个对象ostream
类,当您执行类似操作时
cout << " "<< endl << cout << "Hello world!" <<endl;
cout对于大多数来说,如果它正在运行,我会感到惊讶,你确定那是你的代码吗?这里没有操作符eah,这里相当emo:这个代码片段将在之前打印一个非空指针“Hello world!”
pre-c++11。它不会用c++11或更高版本编译。这让我想起,我认为这会更多地属于语义而不是语法,尽管除此之外,使用什么编译器来运行它,它只会对我抛出错误它会单独使用现代编译器生成编译器错误,还是只通过实际启用c++11生成编译器错误?(在很多情况下,这仍然不是默认值)@mkrieger1这是一个很好的观点-您可能需要为此启用C++11(或C++14或C++17)模式。@mkrieger1更新的GCC和trunk-Clang默认为-std=gnu++14(“C++14加上不符合标准的gnu扩展”模式)。VS2017根本没有C++98或C++11模式。我相信1来自一个布尔转换,它看起来像在C++03中,cout
hadoperator void*()const代码>基本上没有返回失败()?空:这个代码>。C++11移动到显式运算符bool()const代码>。1不是“cout
的参考地址”,您只是没有使用C++11或更高版本进行编译。
cout << " "<< endl << "Hello world!" << endl;
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 << " "<< endl << cout << "Hello world!" <<endl;
auto o1 = cout << " ";
auto o2 = o1 << endl;
auto o3 = o2 << cout;