在C++中,`var << ifstream`与`ifstream >> var`相同吗?

Pol*_*ial 3 c++ extraction ifstream insertion

var << ifstream一样的ifstream >> var吗?

据我所知,它们应该完全相同.但现在已经很晚了,我的大脑半睡半醒,所以我想澄清一下.

Ker*_* SB 9

他们不一样.foo << barfoo.operator<<(bar)operator<<(foo, bar),当bar >> foobar.operator>>(foo)operator>>(bar, foo).

他们只是不同的东西.无论是否存在这些版本,更不用说是否存在两个版本它们做同样的事情,完全取决于代码中的内容.

对于标准的iostream,通常只为以下两个自由函数定义,而不为其他任何函数定义某些用户定义的类型T:

std::ostream & operator<<(std::ostream &, T const &);  // for "os << x"
std::istream & operator>>(std::istream &, T &);        // for "is >> y"
Run Code Online (Sandbox Code Playgroud)

  • 没问题.最好记住C++中的运算符可以在整个地方过载; 有时这会在非常意外的情况下出现(例如,当前标准中存在关于错误使用逗号运算符的缺陷).但重载运算符只是函数调用,并没有魔力. (4认同)