关于引用的临时笔记
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

浙公网安备 33010602011771号