`
ostrichmyself
  • 浏览: 37528 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++函数传参--永远的复制+值传递

阅读更多
void process(A a){}
当process发生调用时,如
A b;
process(b);
这个时候发生的故事,是b的值(此时是对象值)复制,
将该对象传给process, 因此process中的改变,对b没有影响。
----我们喜欢将这个归结为值传递。

void process(A* a){}
发生调用A b;
process(&b);
这个时候发生的故事,是&b的值(b的地址)赋值,
该地址传给Process, process中,通过地址,找到对象,并改变原对象。
所以,b发生改变。
----我们喜欢将其归结为传引用。


其实永远都是传值,但函数中操作的方式不同,所以才造成对象是否能变化的问题。


打个比方,有人给你寄了包裹,包裹(对象)寄到了邮局(对象地址),然后邮政人员打印了一份取包裹的通知(上面有包裹对象的地址),这个时候,包裹通知总要留一份存根吧!写通知垫在底下的复印纸,而你就是取包裹的function,收到也仅仅只是通知的复印件,但你根据上面的地址操作打开包裹,操作包裹,当然会对这个包裹产生作用。


假如是第一种情况的调用, 包裹传递给function的时候,会被复制一份,操作的不再是原来的东西.


函数传参只有一种方式:复制一份,并传值。究竟是操作原来的对象,还是值对象,就看函数怎么利用传入过来的值了,如果是通过地址找对象,当然对原来的对象产生了影响,否则,将不影响原来的对象。


所以,写函数的时候,不要将对象作为参数,否则,栈的资源消耗会非常严重。 当然,除非有必要这样做。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics