关于引用的临时笔记

class Base { /* ... */ };

class Sub: public Base { /* ...*/ };

void Inner (Base obj) { //...change something in obj ... }

void Outer (Base& obj)

{

Inner( obj );

}

void main()

{

Sub d;

Outer (d);

}

请问d会被改变吗?

不会

 

旧的(错误的)想法:

d进入到Outer (Base& obj)以后成了obj

obj是一个引用

以引用调用Inner (Base obj)

引用被复制,还是引用

所以d被改变了

 

正确的看法:

d进入Outer (Base& obj)

因为形参是引用

所以d直接进入,不产生复制

obj就是d

然后Inner( obj )

Inner (Base obj)形参不是引用

obj也就是d被复制了一份

所以在Inner中对obj的修改不会影响d

posted @ 2020-04-27 21:15  灰雾核心  阅读(112)  评论(0)    收藏  举报