我懂Java,现在想学C++。我不太明白cout(字符输出流)和cin(字符输入)是什么。它们是全局变量吗?那为什么在代码中没有声明?
"My message">>cout;
无法工作?但是
cout<<"My message";
工作。
我懂Java,现在想学C++。我不太明白cout(字符输出流)和cin(字符输入)是什么。它们是全局变量吗?那为什么在代码中没有声明?
"My message">>cout;
无法工作?但是
cout<<"My message";
工作。
cout
是 std::ostream
类的一个实例,是全局变量。但是,相关头文件没有声明 operator>>(char *, ostream& os);
,所以 "My message">>cout;
会报错,错误信息大概是“找不到接受 const char * 和 std::ostream 参数的 >> 运算符”(有时编译器可能会因为这种事情而变得非常混乱,导致更多的错误)。
cin
也是同样的道理,只不过是 std::istream
类。
如果你真的想折磨人们,可以这样做:
template<typename T>
std::ostream& operator>>(T x, std::ostream& os)
{
os << x;
return os;
}
"My Message " >> "Some other string" >> cout;
这种写法是无效的,这也可能是为什么不这样做的原因之一。cout
与其他自定义类型的变量没有区别。std::cout
和std::cin
确实是全局变量。你的代码无法编译,因为这不是语言的工作方式。你必须将流放在左边,然后是操作符,然后是你要流入/流出的变量。(对于输出,你可以使用文字和表达式以及变量。)