可能重复:
Why should the copy constructor accept its parameter by reference in C++?
我有以下代码:
class Student {
private:
int no;
char name[14];
public:
void display() const;
Student(const Student& student); // Line 1
};
我已经读过该类是一个引用类型,所以为什么在上面代码的第1行声明为别名。
Line 1
是否等同于:Student(const Student student);
?
答案 0 :(得分:5)
答案 1 :(得分:2)
首先我会用
std::string name
而不是
char name[14]
和Student(const Student student);
与Student(const Student& student);
Student(const Student student) //is a copy
Student(const Student& student) // is a reference to the object
答案 2 :(得分:2)
答案 3 :(得分:1)
它完全没有相同的代码。
通过引用传递参数将推送函数参数堆栈上的确切对象。按值传递一个将推送副本。
如果你声明你的拷贝构造函数没有引用,你将得到一个无限循环,因为程序将尝试创建一个调用拷贝构造函数的副本,而后者将尝试创建一个副本等等。
答案 4 :(得分:0)
答案 5 :(得分:0)
Class是许多托管语言(如Java或C#)中的引用类型。但是在C ++中并非如此。如果您编写Student(const Student student);
,则表示您定义了一个构造函数,该构造函数按值获取一个类型为Student 的参数。实质上是将对象复制到函数的范围内。
同样在C ++中我们调用这样的语法:Student(const Student& student);
通过引用传递,而不是别名(实质上是相同的,但在阅读某些相关主题时可能会令人困惑)。