STL中getline的设计大旨

STL中getline的设计疏忽
方法getline,顾名思义,是获取流中的一行出来,在STL中全局方法getline的定义是:

getline(basic_istream<,>& _Istr, basic_stream<,>& _Str);

在basic_istream中的定义是:

getline(_Elem* _Str, streamsize _Count);

既然是获去流中的一行出来,为什么basic_istream中的getline还得加个_Count限制,如果仅是考虑到内存空间的限制,那这种接口的设置不够合理,不知道大家怎么看?
STL getline 疏忽

------解决方案--------------------
如果我输入一个1TB字节的a,帖主怎么看?
------解决方案--------------------
istream的成员函数getline的第一个参数是char数组,不管是静态还是动态肯定是有限的,不能自动增长,因此getline时就不能超过这个数组的长度,必须加count限定
全局getline的第二个参数数string,可以自动增长,因此不需要限制长度
------解决方案--------------------
全局的 getline 是定义在 string 头文件里面的.

basic_istream 类是不依赖于 std::string 的, 它都不知道有 std::string 可用, 就只能按传统的字符串方式了.
------解决方案--------------------
同样的还有 fstream 的构造函数和 open 函数, 都是用 char* 做参数的, 而不是用 std::string, 因为不想引入过多的依赖性.
------解决方案--------------------
不只是不想引入依赖性, 由于 std::string 重载了从 istream, ostream 输入输出的, 是 std::string 已经依赖于流了, 如果流在去依赖 std::string 就造成循环依赖了.
看来不是不想, 是不能.
------解决方案--------------------
引用:
不只是不想引入依赖性, 由于 std::string 重载了从 istream, ostream 输入输出的, 是 std::string 已经依赖于流了, 如果流在去依赖 std::string 就造成循环依赖了.
看来不是不想, 是不能.
这说法不对的
流输入输出的重载是在string类外部的,没有对string有依赖
实际上c++11中fstream的open已经支持string作为参数了
------解决方案--------------------
引用:
Quote: 引用:

不只是不想引入依赖性, 由于 std::string 重载了从 istream, ostream 输入输出的, 是 std::string 已经依赖于流了, 如果流在去依赖 std::string 就造成循环依赖了.
看来不是不想, 是不能.

std::string 重载了从 istream, ostream 输入输出?在哪个地方?能否贴出来看一下
在string头文件里啊
cout<<str;这种不是很常用的么
------解决方案--------------------
引用:
Quote: 引用:

不只是不想引入依赖性, 由于 std::string 重载了从 istream, ostream 输入输出的, 是 std::string 已经依赖于流了, 如果流在去依赖 std::string 就造成循环依赖了.
看来不是不想, 是不能.
这说法不对的
流输入输出的重载是在string类外部的,没有对string有依赖
实际上c++11中fstream的open已经支持string作为参数了


虽然是在类外部, 但是标准库只有头文件, 没有 cpp, 还是会在头文件之间引入循环包含的.

fstream 可以使用 std::string 了, 那可能是因为 std::string 依赖的是 istream, 而不是 ifstream 所以依赖关系成了:  istream <-- string <-- ifstream 还是能保持单向. 但是要在 istream 的 getline 函数里引入 string 就恼火了, 会造成循环依赖的.