为什么我要在构造函数中使用对const的引用

Why would I want to use reference to const in Constructor?

本文关键字:const 引用 我要 构造函数 为什么      更新时间:2023-10-16

一个有点傻的问题,但是为什么?

为什么我要使用const string的引用,而不是仅仅在构造函数中声明一个局部字符串?

class Person (const string &first_name, const string &last_name);
class Person (string first_name, string last_name);

我是否以这种方式获得对自动变量的引用?o_O

谢谢!

因为"幕后"发生的事情的语义是完全不同的。

class Person1 {
    std::string f_name, l_name;
public:
    Person(std::string first_name, std::string last_name) :
    f_name(first_name), l_name(last_name) {
    }
};
class Person2 {
    std::string f_name, l_name;
public:
    Person(const std::string & first_name, const std::string & last_name) :
    f_name(first_name), l_name(last_name) {
    }
};

当构造Person1的实例时,用于初始化它的名称被复制两次:第一次用于初始化构造函数中的局部变量,第二次用于复制构造到成员变量。然而,对于Person2,只发生一次复制:当对成员变量进行复制构造时。

对于这样一个简单的示例,可能不清楚这是否代表重要的性能和内存含义,但对于更复杂的程序,这可能非常重要。