关于在C ++中将类作为别名参数传递的问题?

时间:2011-09-07 13:54:20

标签: c++ class alias

  

可能重复:
  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);

6 个答案:

答案 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);通过引用传递,而不是别名(实质上是相同的,但在阅读某些相关主题时可能会令人困惑)。