0

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

void Start(const Point &start);

line 类包含两个名为 start 和 end 的数据成员,它们都是 Point 对象。由于start函数参数中的变量是引用,我实现如下:

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

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

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

m_start数据成员现在是否会直接start Point引用主函数中的对象,因为它是通过引用传递的?

4

1 回答 1

2

m_start 数据成员现在是否会直接引用主函数中的起始点对象,因为它是通过引用传递的?

不。C++ 引用的属性之一(以及它们的行为与指针不同的方式之一)是无法重新安装引用 - 也就是说,您不能创建“引用”的引用' 一件事以后'指'另一件事。(当然,如果您的m_start成员变量是 typePoint而不是 type Point &,那么无论如何都没有提及尝试重新安装)

相反,start将调用 ' 的复制构造函数将start' 的内容复制到您的m_start成员变量中。

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

  1. 在您的const Point &版本中Start(),没有制作 Point 对象的单独/方法本地副本

  2. 在您的const Point &版本中Start(),尝试start从方法内部进行修改将是编译时错误(而在按值传递版本中,内部代码Start()可以修改参数,但修改在函数外部永远不可见,Start()因为他们只会修改局部变量/参数)

于 2018-08-12T01:56:11.320 回答