#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结尾的字符串指针就足够了。但istringstream
的{{1}}只取ctor
而不是std::string
(仅限c ++ 1z)作为其论据。
在这种情况下,是否有办法让std::string_view
更有效率?
答案 0 :(得分:3)
您可以简单地分配istringstream
:
istringstream stream;
stream.rdbuf()->pubsetbuf(p, strlen(p));
这不会复制字符串。请注意pubsetbuf()
希望char*
不是const char*
,但它实际上并没有修改字符串,所以在传递之前你可能const_cast
你的C字符串指针。