1
假设我想要operator>>
从istream
中提取整行而不是空白分隔的单词。我很惊讶地看到,这虽然可怕,实际工作:为什么我可以重载istream的操作符>>用于字符串?
#include <iostream>
#include <string>
namespace std {
istream &operator>>(istream &is, string &str) {
getline(is, str);
}
}
int main() {
std::string line;
std::cin >> line;
std::cout << "Read: '" << line << "'\n";
}
如果键入多个单词到标准输入,它实际上叫我的操作和阅读一整行。
我期望operator>>
的定义与official one相冲突,产生链接错误。为什么不呢?
编辑:我想,也许真正的operator>>
是一个模板,非模板功能优先,但是这仍然作品一样好:
namespace std {
template<typename charT>
basic_istream<charT> &operator>>(basic_istream<charT> &is, basic_string<charT> &s) {
getline(is, s);
}
}
[签名不看完全一样(http://en.cppreference.com/w/cpp/string/basic_string/operator_ltltgtgt)。 P.S:[不要使用cplusplus.com](http://kera.name/articles/2013/02/cplusplus-com-is-bad-and-you-should-feel-bad/) – Borgleader