在 class 成员函数中将 const 引用作为函数参数传递

Passing a const reference as a function parameter in a class member function

假设我们有一个名为 Line 的 class,它包含以下为 class 数据成员赋值的修饰符。

void Start(const Point &start);

行class包含两个名为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 对象吗?

Would the m_start data member now refer directly to the start Point object in the main function since it was passed by reference?

没有。 C++ 引用的一个属性(以及它们的行为不同于指针的一种方式)是不可能 重新设置 一个引用——也就是说,你不能参考 'referring to' 是一回事,后来 'refer to' 又是另一回事。 (当然,如果您的 m_start 成员变量是 Point 类型而不是 Point & 类型,那么无论如何都不会引用 attempt-to-reseat )

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

结果是您的 Start() 方法的行为与类似实现的 void Line::Start(Point start) 方法完全一样,但有以下例外:

  1. 在您的 const Point & 版本的 Start() 中,没有创建 Point 对象的 separate/method-local 副本

  2. 在您的 const Point & 版本的 Start() 中,尝试从方法内部修改 start 将是一个编译时错误(而在 pass-按值版本,Start() 中的代码可以修改参数,但修改在 Start() 函数外部永远不可见,因为它们只会修改本地 variable/parameter)