gpt4 book ai didi

c++ - 从类方法返回 "const char*"作为 std::string&

转载 作者:行者123 更新时间:2023-11-30 01:36:57 26 4
gpt4 key购买 nike

我有一个返回 C 字符串的 C-Libraray 函数

const char* myFuncC(struct myS *);

现在我写一个类映射器:

class myC {
private:
struct myS * hdl
...
public:
const char* myFunc() {
return myFuncC(hdl);
}

// want to have...
const std::string& myFuncS() {
return ??? myFuncC(hdl);
}
}

现在我想返回一个:const std::string& 而我不想复制 C 字符串指针数据

我该怎么做?

更新

有没有像 const C++-String 类一样使用 const C-String 指针 作为字符串源的 C++ 类?

我会称这个类为 C++-String-External ... External 意思是 ... 使用 external 源作为存储 ... 在我的例子中是“常量字符 *”

最佳答案

std::string,根据定义,拥有它的内存,我们无法改变这一点。此外,通过返回一个引用,您正在创建一个对局部变量的悬空引用(或内存泄漏)。

但是,将连续的字符范围封装在类似字符串的接口(interface)中而不进行复制的想法是一个常见的问题,以至于 C++17 添加了一个新类型 std::string_view,以准确地完成那。有了它,你的代码可以写成:

std::string_view myFuncS() {
return {myFuncC(hdl)};
}

string_view 不是字符串,但它有一个非常相似的 API,其想法是使用它来代替许多当前使用的 string const&。它非常适合这里的工作。

请注意,我们将返回拷贝,以避免悬空引用。但是,这不会复制底层内存,而且很便宜——几乎与返回引用一样便宜。

关于c++ - 从类方法返回 "const char*"作为 std::string&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com