gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:30:16 26 4
gpt4 key购买 nike

假设我们有一个名为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com