引用重新分配的变量

时间:2015-07-25 04:16:15

标签: c++

说我有这个代码:

class A{
    ...
};

//somewhere else
A a;
A & ref = a;
a = A();

ref仍然引用a吗?无论有多少作业发生?也就是说,赋值运算符永远不会导致内存位置更改,对吗?

3 个答案:

答案 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