getline
函数有一个character version这是一个成员函数,以及global version需要字符串。为什么他们不是成员函数?目前的方式看起来好像没有字符串版本。为什么getline的字符串版本是非成员函数?
7
A
回答
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公共接口的一部分。
相关问题
- 1. 什么是非静态成员函数?
- 2. Vim的:函数getline和非ASCII字符
- 3. 为什么通用函数成员选择的是非泛型成员?
- 4. “非法使用非静态成员函数”这是什么?
- 5. 字符串数据成员的意义是什么?
- 6. 函数getline(isstream,字符串)在C++
- 7. 调用成员函数errorInfo()字符串
- 8. 为什么我的clojure.core.logic非成员函数返回两个值?
- 9. 成员的函数定义是什么?
- 10. 运算符重载:成员函数与非成员函数?
- 11. 为什么可以这样调用非静态成员函数?
- 12. 的std ::函数getline使用char *为字符串
- 13. 为什么成员函数返回零
- 14. C++版本使用函数getline
- 15. 什么是PHP版本字符串中的lenny8?
- 16. C++:为成员函数的变异和非变异版本建议名称
- 17. 作为成员或非成员函数的算法?
- 18. 在非成员函数声明的开头有什么影响?
- 19. 我对getline +字符串不了解么?
- 20. 成员函数非对象
- 21. 非成员函数模板
- 22. 什么是“PHP标准化”版本号字符串?
- 23. 为什么我不能发送一个字符串,但只有一个数字到成员函数?
- 24. 将非会员非朋友函数加入到成员函数
- 25. 为什么字符串总是空的?
- 26. 生成字符串作为printf函数
- 27. 为什么不是std :: forward_list给定一个count()成员函数?
- 28. 为什么Stack :: top()是一个const成员函数?
- 29. Effective C++项目23首选成员函数的非成员非朋友函数
- 30. 什么是由非成员运算符重载
尽管它最初可能与直觉相反,但有些作者支持这样的想法,即向类中添加功能的最面向对象的方式是通过自由函数来实现的。仔细阅读[本周大师#84](http://www.gotw.ca/gotw/084.htm)。这个问题可能会变成,*为什么一些现有的库成员函数不是自由函数?* – 2010-12-14 00:38:18