为什么std::istream::getline不在std::string上操作? 在C++中,代码> istRAM/有一个方法,叫做“代码> GETLION/CODEX”,它在C风格字符数组上运行。我知道还有其他独立的getline函数在istream和std::string上运行。但为什么要采用另一种方法呢?为什么不把它放在istream?为什么istream的getline只对C样式的字符串有效,而不是std::string

为什么std::istream::getline不在std::string上操作? 在C++中,代码> istRAM/有一个方法,叫做“代码> GETLION/CODEX”,它在C风格字符数组上运行。我知道还有其他独立的getline函数在istream和std::string上运行。但为什么要采用另一种方法呢?为什么不把它放在istream?为什么istream的getline只对C样式的字符串有效,而不是std::string,c++,istream,C++,Istream,我的想法是,它是为性能而设计的。您可以只分配一次缓冲区块,并且可以逐行迭代处理。请注意,std::getline以std::string为参数,在写入s之前调用s.erase(),如果行太长,可能会导致s分配更多缓冲区。我认为字符串库和流库是分开开发的。我认为这就是为什么我们在streams库中没有universalstd::string支持的原因。虽然这已经解决了一点,但是现在有了std::fstream::open字符串 需要注意的一点是,std::istream::getline比std:

我的想法是,它是为性能而设计的。您可以只分配一次缓冲区块,并且可以逐行迭代处理。请注意,
std::getline
std::string
为参数,在写入
s
之前调用
s.erase()
,如果行太长,可能会导致
s
分配更多缓冲区。

我认为字符串库和流库是分开开发的。我认为这就是为什么我们在streams库中没有universal
std::string
支持的原因。虽然这已经解决了一点,但是现在有了
std::fstream::open
字符串

需要注意的一点是,
std::istream::getline
std::getline
更安全,因此在某些情况下应该首选

问题是
std::getline
没有检查将要读取的字符串的长度。这意味着恶意代码(或损坏的数据源)可以通过显示包含很长一行的数据来破坏内存

使用
std::istream::getline
可以限制读取的量