将const引用作为函数参数传递给类成员函数

时间:2018-08-12 01:40:18

标签: c++ class const-reference

假设我们有一个名为Line的类,其中包含以下修饰符,该修饰符为一个类数据成员分配一个值。

void Start(const Point &start);

该行类包含两个数据对象,分别称为start和end,它们都是Point对象。由于function参数中的start变量是一个引用,因此我将其实现如下:

void Line::Start(const Point &start) { m_start = start; }

在主要功能中,我有以下内容。

Line line; Point start(1, 1); line.Start(start);

由于m_start数据成员是通过引用传递的,因此现在可以直接引用main函数中的start Point对象吗?

1 个答案:

答案 0 :(得分:2)

  

现在m_start数据成员可以直接引用起点吗?   主函数中的对象是否已通过引用传递?

不。 C ++引用的属性之一(以及其行为与指针的行为不同的一种方式)是不可能重置一个引用,也就是说,您不能进行引用那是“指”一件事,后来“指”另一件事。 (当然,如果您的m_start成员变量的类型为Point,而不是类型为Point &,那么无论如何都没有尝试重装的引用。

相反,将调用start的copy-constructor将start的内容复制到您的m_start成员变量中。

结果是,您的Start()方法的行为将完全类似于类似实现的void Line::Start(Point start)方法,但以下情况除外:

  1. const Point &的{​​{1}}版本中,没有为Point对象制作单独的/方法本地的副本

  2. 在您的Start()版本的const Point &中,尝试从方法内部修改Start()会导致编译时错误(而传递值版本,start内的代码可以修改参数,但所做的修改在Start()函数之外是看不到的,因为它们只会修改局部变量/参数)