c++ - 在类成员函数中将 const 引用作为函数参数传递

标签 c++ class const-reference

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

void Start(const Point &start);

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

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

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

行行; 点开始(1, 1); 线。开始(开始);

m_start 数据成员现在是否会直接引用 main 函数中的 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++ 引用的一个属性(以及它们的行为不同于指针的方式之一)是不可能重新设置一个引用——也就是说,你不能创建一个引用那是“指”一件事,后来“指”另一件事。 (当然,如果您的 m_start 成员变量是 Point 类型而不是 Point & 类型,那么无论如何都不会提及尝试重新安装)

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

结果是您的 Start()方法的行为与类似实现的 void Line::Start(Point start) 完全一样方法会,但有以下异常(exception)情况:

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

  2. 在你的const Point & Start() 的版本, 试图修改 start来自方法内部的将是一个编译时错误(而在按值传递版本中,Start() 中的代码可以修改参数,但这些修改永远不会在 Start() 函数之外可见,因为它们“d 只修改局部变量/参数)

关于c++ - 在类成员函数中将 const 引用作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51805052/

相关文章:

c++ - 函数头中的条件运算符 "?:"和 LPCTSTR

ios - 如何在两个类之间进行交集

C++:将枚举作为值还是作为常量引用传递更好?

c++ - 从函数返回临时对象的引用

c++ - 使用 SDL 时出现段错误

c++ - 链接问题 : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

Python--从列表中删除对象

c++ - 隐式转换 : const reference vs non-const reference vs non-reference

c++ - 如果出现链接器错误 "undefined reference",如何找到符号的调用例程?

c++ - ',' 或 ';' 之前的预期类名