istream::operator>>有一个重载,它接受除char
之外的任何类型的变量进行写入。为什么?
std::istream
和std::ostream
都有两组重载。数值类型、操纵器类型和缓冲区的定义为成员函数,而基于字符的I/O的定义为全局函数。除了基于字符的重载之外,还有针对不同标准类(如std::string
和std::complex
)的重载。您自己甚至可以为不同的自定义类实现不同的重载。
operator>>
存在非成员和成员重载。您要查找的char重载是函数模板,而成员重载是非模板的。例如:
template< class CharT, class Traits >
basic_istream<CharT,Traits>& operator>>( basic_istream<CharT,Traits>& st, CharT& ch );