为什么getline的字符串版本是非成员函数?

时间:2010-12-13 22:35:49

标签: c++ string std

getline函数有一个成员函数character version,以及一个带字符串的global version。为什么他们不是会员职能?目前的方式似乎没有字符串版本。

3 个答案:

答案 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公共接口的一部分。