2010-12-13 66 views
7

getline函数有一个character version这是一个成员函数,以及global version需要字符串。为什么他们不是成员函数?目前的方式看起来好像没有字符串版本。为什么getline的字符串版本是非成员函数?

+0

尽管它最初可能与直觉相反,但有些作者支持这样的想法,即向类中添加功能的最面向对象的方式是通过自由函数来实现的。仔细阅读[本周大师#84](http://www.gotw.ca/gotw/084.htm)。这个问题可能会变成,*为什么一些现有的库成员函数不是自由函数?* – 2010-12-14 00:38:18

回答

5

istream& istream::getline(char* s, streamsize n)是流接口的一部分。

istream& getline(istream& is, string& str)距离string库(就像istream &operator>>(istream&, string&))的扩展方法。

这种设计,以很可能选择去耦输入输出流,为fstream::open()也没有采取std::string参数而是const char*

2

因为iostream类的实现不应该依赖于字符串。

1

流库的问题在于它没有很好的设计。特别是成员函数getline不应该在那里。免费功能getline是他正确使用的一个,它有几个优点:它不是一个成员函数,它是安全的,不在原始缓冲区上工作,并且不需要猜测。

需要指出的是,成员函数和自由函数都是istream公共接口的一部分。

相关问题