c ++如何创建包含大小未初始化字节的std :: string?

han*_*rik 5 c++ optimization std stdstring

我需要一个 std::stringsize字节,在构造它之后,我将在读取之前写入该字符串中的每个字节,因此空初始化字符串是浪费 cpu,这是有效的:

std::string s(size,0);
Run Code Online (Sandbox Code Playgroud)

但它只是有点浪费,它基本上就像calloc()在我需要的时候使用一样malloc(),所以问题是,我如何构造一个 X 未初始化字节的字符串?

(使用 Reserve()+push 不是一种选择,因为我将字符串提供给 C-api 以char*,size进行实际初始化)

编辑:此线程似乎与相同的问题/相关(但使用向量而不是字符串):C++11 中的值初始化对象和 std::vector 构造函数

bar*_*top 5

你不能用 来做到这一点std::string。但它可以通过不同的方式实现,比如使用std::unique_ptr<char[]>.

auto pseudo_string = std::unique_ptr<char[]>(new char[size]);
Run Code Online (Sandbox Code Playgroud)

或者如果您的编译器支持 C++20

auto pseudo_string = std::make_unique_for_overwrite<char[]>(size);
Run Code Online (Sandbox Code Playgroud)

  • 看来 c++20 引入了 std::make_unique_for_overwrite 来做到这一点。 (2认同)