Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 构造一个没有分配的字符串_C++_String - Fatal编程技术网

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

C++ 构造一个没有分配的字符串,c++,string,C++,String,考虑到我们有一个带有char*member的结构,如果我们想请求这个成员的内容,我们通常会这样做 char const * get_member() { return object.member; } 这样,我们只返回一个指针,没有任何分配 如果现在我们想返回一个字符串;是否可以让字符串仅使用该指针,而不是复制内容并构造新的字符串对象 string const & get_member() { return object.member; } 上面的代码将执行内存分配。与char co

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

char const * get_member() { return object.member; }
这样,我们只返回一个指针,没有任何分配

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

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

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

不,这是不可能的
std::string
始终分配自己的内存,并且不能拥有预先存在的缓冲区


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

结构是从一些基于C代码的库中,只想用C++包,同时不杀任何性能。


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

你能不能不只是
const string*get_member()
?这会为字符串分配内存?或者甚至
const std::string&get_member()
。让你的成员是std::string。Return const std::string&
std::string\u视图
也是一个选项。它与
char*
成员兼容,但与当前代码一样,将管理相对生存期的负担放在了调用方身上。如果调用返回
const string&
的引用,则意外地保留引用而不是副本要困难得多。