【问题标题】:Passing a const reference as a function parameter in a class member function将 const 引用作为类成员函数中的函数参数传递
【发布时间】:2018-08-12 01:40:17
【问题描述】:

假设我们有一个名为 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 数据成员现在是否会直接引用 main 函数中的 start Point 对象,因为它是通过引用传递的?

【问题讨论】:

  • m_start的声明在哪里?如果 m_startPoint 则否,则复制该值。如果它是一个 const 引用,那么你有一个编译错误。您需要在初始化列表中初始化 const 成员和引用。
  • 您是否尝试过自己进行测试,例如更改之后的点并使用另一个类方法从传递的Point 引用中输出数据以查看它是否与Point 相同?

标签: c++ class const-reference


【解决方案1】:

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

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

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

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

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

  2. 1234563 @ 可以修改参数,但修改在 Start() 函数之外永远不可见,因为它们只会修改局部变量/参数)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2020-09-14
    • 1970-01-01
    • 2019-09-27
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多