假设我们有一个名为Line
的类,其中包含以下修饰符,该修饰符为一个类数据成员分配一个值。
void Start(const Point &start);
该行类包含两个数据对象,分别称为start和end,它们都是Point对象。由于function参数中的start
变量是一个引用,因此我将其实现如下:
void Line::Start(const Point &start) {
m_start = start;
}
在主要功能中,我有以下内容。
Line line;
Point start(1, 1);
line.Start(start);
由于m_start
数据成员是通过引用传递的,因此现在可以直接引用main函数中的start
Point
对象吗?
答案 0 :(得分:2)
现在m_start数据成员可以直接引用起点吗? 主函数中的对象是否已通过引用传递?
不。 C ++引用的属性之一(以及其行为与指针的行为不同的一种方式)是不可能重置一个引用,也就是说,您不能进行引用那是“指”一件事,后来“指”另一件事。 (当然,如果您的m_start
成员变量的类型为Point
,而不是类型为Point &
,那么无论如何都没有尝试重装的引用。
相反,将调用start
的copy-constructor将start
的内容复制到您的m_start
成员变量中。
结果是,您的Start()
方法的行为将完全类似于类似实现的void Line::Start(Point start)
方法,但以下情况除外:
在const Point &
的{{1}}版本中,没有为Point对象制作单独的/方法本地的副本
在您的Start()
版本的const Point &
中,尝试从方法内部修改Start()
会导致编译时错误(而传递值版本,start
内的代码可以修改参数,但所做的修改在Start()
函数之外是看不到的,因为它们只会修改局部变量/参数)