考虑到我们有一个带有char *成员的结构,如果我们想要请求该成员的内容,我们通常会这样做
char const * get_member() { return object.member; }
这样,我们只返回一个指针,没有任何分配。
如果现在我们想要返回一个字符串;是否可以让字符串只使用该指针,而不是复制内容并构造一个新的字符串对象?
string const & get_member() { return object.member; }
上面的代码将进行内存分配。这个方法与char const *
一个方法相比有什么额外的工作呢?
答案 0 :(得分:3)
不,这是不可能的。 std::string
总是分配自己的内存,不能取得预先存在的缓冲区的所有权。
您可以返回指针的副本,也可以首先使用std::string
成员,并返回对它的引用。或者,也可以返回std::string_view
,可以与char*
或std::string
成员一起使用。字符串视图仅在C ++ 17之后可用,但它也存在于标准库扩展中,有些用于早期编译器,并且还存在非标准实现。
struct来自一些基于C代码的库,只想用C ++包装,同时不要杀死任何性能。
然后似乎返回std::string
将不是一个合适的设计。