为什么我要在Constructor中使用const的引用?

时间:2016-08-16 16:37:35

标签: c++ constructor

有点愚蠢的问题,但为什么?

为什么我要使用const string的引用,而不只是在Constructor中声明一个本地字符串?

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

我是否通过这种方式获得了对自动变量的引用? O_O

谢谢!

1 个答案:

答案 0 :(得分:-1)

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

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的实例时,用于初始化它的名称会被复制两次:首先在构造函数中启动局部变量,然后将copy-construct复制到成员变量。但是,对于Person2,只会发生一个副本:当成员变量的复制构造发生时。

通过这样一个微不足道的例子,可能并不清楚这代表了重要的性能和内存含义,但对于更复杂的程序,这可能非常重要。