gpt4 book ai didi

c++ - c++ 的构造函数中的 const string &name 和 string name 之间的区别

转载 作者:行者123 更新时间:2023-11-30 02:49:01 37 4
gpt4 key购买 nike

Person(const string &name)
{
mName=name;
}


Person(string name)
{
mName=name;
}

mName是私有(private)成员变量

所以我创建了一个名为 Person 的类。我想知道 const string &name 和 string name 之间有什么区别。我试过只输入 string &name 但它给了我一条错误消息。

我知道 & 是一个引用,几乎就像一个地址?我猜 const 是必需的,因为引用是一个常量?另外,为什么 string &name 不起作用?

这是我得到的错误信息

候选构造函数(隐式拷贝构造函数) 不可行:没有已知的从“const char [4]”到“const Person”的转换 对于第一个参数

候选构造函数不可行:没有已知的转换 第一个参数从“const char [4]”到“string &”(又名“basic_string,分配器> &”) 人(字符串和名字)

最佳答案

选项 #1 - 按值传递参数,使用 Person(string name):

  1. string 构造函数被调用,并在堆栈上创建一个临时的 string 实例。

  2. Person 构造函数被调用。

  3. string 使用临时实例调用析构函数。

选项 #2 - 通过引用传递参数,使用 Person(const string& name):

  1. string 实例(其 4 字节或 8 字节地址)的引用被放置在堆栈上。

  2. Person 构造函数被调用。

如您所见,选项 #2 通常更有效。

编译错误可能是类似Person x("abc")的结果:

编译器首先搜索一个 Person 构造函数,它采用您传递的参数的显式类型。在本例中,它是您尚未定义的 Person(const char[])

然后,编译器搜索任何其他采用“可转换”类型的 Person 构造函数。由于 operator const string&(const char[]) 存在,编译器可以将参数 "abc"const char[] 转换为 常量字符串&。因此,如果您定义了 Person(const string& name),那么您的代码将成功编译。

最后,编译器会为您定义的每个 Person 构造函数解释为什么它不适合您的调用。在这种情况下,它告诉您没有 operator string&(const char[]),这允许它从 const char 转换参数 "abc" []string& 在调用你的 Person(string&) 构造函数之前。

关于c++ - c++ 的构造函数中的 const string &name 和 string name 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21620776/

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