What does “reference can never be made to refer to another object” mean? [duplicate]

非 Y 不嫁゛ 提交于 2020-01-15 15:29:33

问题


I read about C++ reference variables and somewhere I found this:

A declaration of a const reference is redundant since reference can never be made to refer to another object.

what does it mean?

Here, for example, I can change the object that the reference is referring to:

void p(int& i) {
    int a = 7,c = 0;
    i = a;
}

So what does it mean that "Reference can never be made to refer to another object"?

thanks in advance.


回答1:


It means, given this code

int a;
int b;
int& ref = a;

that, once you've initialized ref to refer to a, there is no way you can make it refer to b or any other variable.

Any change you make to the reference will reflect on the variable that you used to initialize it with. The reference (which itself is not even a proper object) stays intact.

Also, a reference is only usable as long as the object it refers to stays alive.




回答2:


In your example, you are not changing what i is pointing at. It is changing the VALUE of i to the value of a. If you where to display the address of i, you'd see it is different from a.




回答3:


If you do int &r = x; this means that r refers to x and every time you change r, you really change x. Likewise every time you change x that change is visible through r.

Now what "Reference can never be made to refer to another object" means is that once you do int &r =x, you can't make r refer to y. You can do r = y;, but all that does is to set x equal to y. It does not means that changing r afterwards will change y nor does it mean that changes to y will be visible through r.




回答4:


The simplest way to envision it is to speak in terms of pointers:

// reference                     // equivalent pointer code
int& r = a;                      int* const r = &a;

r = b;                           *r = b;

function(r);                     function(*r);

That is, at the moment of declaration, a reference declares an alias to an existing object's memory location. Then, any use of the reference is equivalent to dereferencing a pointer to that memory location.

Now, what of a const reference ? Well it would be:

// reference                     // equivalent pointer code
int& const r = a;                int* const const r = &a;

int const& const r = a;          int const* const const r = &a;

which makes the redundancy quite obvious, I believe.



来源:https://stackoverflow.com/questions/17898110/what-does-reference-can-never-be-made-to-refer-to-another-object-mean

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!