如何让istringstream更有效率?

How to make istringstream more efficient?

#include <sstream>

using namespace std;

const char* GetHugeString();

int main()
{
    const char* p = GetHugeString();

    //
    // Below will copy the huge string into a std::string object!
    // 
    istringstream sstrm{p}; 

    return {};
}

istringstream 不需要大字符串的副本;一个以 null 结尾的字符串指针就足够了。但是 istringstreamctor 仅采用 std::string,而不是 std::string_view(仅限 c++1z)作为其参数。

在这种情况下,是否有解决方法可以使 std::istringstream 更有效率?

您可以简单地分配 istringstream 内部使用的缓冲区:

istringstream stream;
stream.rdbuf()->pubsetbuf(p, strlen(p));

这不会复制字符串。请注意,pubsetbuf() 想要 char* 而不是 const char*,但它实际上并没有修改字符串,因此您可能会在传递它之前 const_cast 您的 C 字符串指针。