为什么 std::istream::getline 不能在 std::string 上运行

Why does std::istream::getline not operate on std::string?

本文关键字:std string 运行 getline istream 为什么 不能      更新时间:2023-10-16

在C++中,istream有一个名为getline的方法,它对C样式的字符数组进行操作。我知道还有其他独立的getline函数在istreamstd::string上运行。但为什么要使用单独的方法呢?为什么不把它放在istream?为什么istream的 getline 只适用于 C 风格的字符串而不是std::string

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

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

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

有了std::istream::getline,您可以读取的内容有限制。

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