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 构造函数
你不能用 来做到这一点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)