说我有这个代码:
class A{
...
};
//somewhere else
A a;
A & ref = a;
a = A();
ref仍然引用a吗?无论有多少作业发生?也就是说,赋值运算符永远不会导致内存位置更改,对吗?
答案 0 :(得分:2)
是的,它确实如此。实际上在最后一行ref
之后会指向无论指向哪一点。
无论你对引用做了什么,也都是对原始对象进行的。
所以你要做的就是为同一个变量定义一个替代名称。
i)引用与指针不同
ii)指针可能未定义/ null但引用应始终与变量相关联。
iii)指针可以在不同的时间指向不同的变量;在整个生命周期中,引用始终与相同的变量相关联。 Check this question
答案 1 :(得分:2)
ref是否仍会引用a?
是的。看下面的代码。它显示了赋值如何不改变内存位置......
A a;
std::cout<<"a:"<< &a<<std::endl;
A & ref = a;
std::cout<<"ref:"<< &ref<<std::endl;
a = A();
std::cout<<"a:"<< &a<<std::endl;
输出如下:
a:0x7fffaaa5fcaf
ref:0x7fffaaa5fcaf
a:0x7fffaaa5fcaf
答案 2 :(得分:0)
ref是否仍然引用a?
是
引用变量是另一个变量的别名
ref
绑定到a
,它是原始的可变内存。将内容分配给a
也会影响ref
,因为它指的是a
的内存。以下是一个小例子:
class A {
public:
A(int x, int y) : m_x(x), m_y(y) {}
A() = default;
int m_x;
int m_y;
};
int main()
{
A a;
A &ref = a;
a = A(500, 500);
cout << ref.m_x << " " << ref.m_y << endl;
}
输出为500 500