构造一个不分配的字符串

Construct a string without allocation

本文关键字:分配 字符串 一个      更新时间:2023-10-16

考虑到我们有一个带有 char * 成员的结构,如果我们想请求这个成员的内容,我们通常会这样做

char const * get_member() { return object.member; }

这样,我们只返回一个指针,没有任何分配。

如果现在我们想返回一个字符串;是否可以让字符串只使用该指针,而不是复制内容并构造一个新的字符串对象?

string const & get_member() { return object.member; }

上面的代码将进行内存分配。 与char const *方法相比,这种方法会做哪些额外的工作?

不,这是不可能的。 std::string始终分配自己的内存,并且无法获得预先存在的缓冲区的所有权。

您可以返回指针的副本,也可以首先使用 std::string 成员,然后返回对它的引用。或者,返回可与char*std::string成员一起使用的std::string_view。字符串视图仅在 C++17 起可用,但它也存在于标准库扩展中,一些用于早期编译器,并且还存在非标准实现。

该结构来自一些基于C代码的库,只想用C++包装,同时,不要杀死任何性能。

那么返回std::string似乎不是一个合适的设计。