构造一个没有分配的字符串

时间:2018-01-16 01:51:58

标签: c++ string

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

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

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

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

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

上面的代码将进行内存分配。这个方法与char const *一个方法相比有什么额外的工作呢?

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。 std::string总是分配自己的内存,不能取得预先存在的缓冲区的所有权。

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

  

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

然后似乎返回std::string将不是一个合适的设计。