getline
函数有一个成员函数character version,以及一个带字符串的global version。为什么他们不是会员职能?目前的方式似乎没有字符串版本。
答案 0 :(得分:5)
istream& istream::getline(char* s, streamsize n)
是流界面的一部分。
istream& getline(istream& is, string& str)
是来自string
库的扩展程序方法(就像istream &operator>>(istream&, string&)
一样)。
可能选择此设计是为了将 iostreams 与 string 分离,因为fstream::open()
也不会使用std::string
参数,而是const char*
1}}。
答案 1 :(得分:2)
因为iostream类的实现不应该依赖于字符串。
答案 2 :(得分:1)
流库的问题在于设计不合理。特别是成员函数getline
根本不应该存在。自由函数getline
是正确使用的,它有几个优点:它不是成员函数,它是安全的,不用于原始缓冲区,并且不需要猜测。
需要提到的是,成员和自由函数都是istream公共接口的一部分。