gpt4 book ai didi

c++ - 如何从原始字符数组文字传递 std::string 参数?

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

首先,我真的不知道我是如何给这个问题加上标题的。所以我们有这段代码:

class Example5 {
string* ptr;
public:
Example5 (const string& str) : ptr(new string(str)) {}
~Example5 () {delete ptr;}
// access content:
const string& content() const {return *ptr;}
};

int main () {
Example5 foo ("Example");

cout << "bar's content: " << foo.content() << '\n';
return 0;
}

所以 class Example5 的构造函数正在将指针 ptr 初始化为指向 str 的指针,对吧?

const string& str 作为参数而不是 string str 是否是最佳方式?我的意思是因为 str 被用作 ptr 指向的东西,为什么参数的值不只是被复制而不是引用一个未命名的实体/字符串文字?这是最优的吗?

最佳答案

So the constructor of the class Example5 is initializing the pointer ptr to be a pointer to str, right?

不!它创建一个新的 std::string 实例并复制参数中传递的内容。

why is the value of the argument not just get copied instead of making a reference to an unnamed entity/the string literal?

好问题,是的。

Is this optimal?

没有。


通常的方法是根本不使用指针:

class Example5 {
string s;
public:
Example5 (const string& str) : s(str) {}
// access content:
const string& content() const {return s;}
};

为了避免复制(如果这确实是您的顾虑),您也可以写

class Example5 {
string s;
public:
Example5 (string str) : s(std::move(str)) {}
// access content:
const string& content() const {return s;}
};

关于c++ - 如何从原始字符数组文字传递 std::string 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44101146/

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