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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++如何创建包含未初始化字节大小的std :: string?相关的知识,希望对你有一定的参考价值。

我需要一个size字节的std :: string,在构造它之后,我将在读取它之前写入该字符串中的每个字节,因此对字符串进行null初始化是对cpu的浪费,这是可行的:

std::string s(size,0);

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

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

编辑:该线程似乎存在相同的问题/相关(但使用向量而不是字符串):Value-Initialized Objects in C++11 and std::vector constructor

答案

std::string无法做到。但这可以通过不同的方式来实现,例如使用std::unique_ptr<char[]>

auto pseudo_string = std::unique_ptr<char[]>(new char[size]);

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

auto pseudo_string = std::make_unique_for_overwrite<char[]>(size);

以上是关于c ++如何创建包含未初始化字节大小的std :: string?的主要内容,如果未能解决你的问题,请参考以下文章

C#库便于动态反射

如何在C中使用动态大小的数组创建结构

C ++中未初始化的内存分配

C中如何实现数组的传值引用

C 编程文件大小

C ++:创建无穷大的整数向量