java – C:按值传递对象的原因
发布时间:2020-12-15 02:07:37 所属栏目:Java 来源:网络整理
导读:在 Java中,包含适当对象的所有变量实际上都是引用(即指针).因此,使用这些对象作为参数的方法调用始终是“通过引用”.调用修改对象状态的方法也会影响原始对象(在调用者端). C是不同的:这里的参数可以通过值传递或通过引用传递.在通过值传递的对象上调用muta
在
Java中,包含适当对象的所有变量实际上都是引用(即指针).因此,使用这些对象作为参数的方法调用始终是“通过引用”.调用修改对象状态的方法也会影响原始对象(在调用者端).
C是不同的:这里的参数可以通过值传递或通过引用传递.在通过值传递的对象上调用mutator方法会使原始对象不受影响. (我想按值调用会创建对象的本地副本). 所以我对此的第一反应 – 从Java到C – 是:当使用对象作为参数时,总是使用指针.这给了我从Java期望的行为. 但是,如果一个人不需要修改方法体中的对象,也可以使用“按值调用”.是否有人想要这样做? 解决方法
不,在C中总是通过引用传递,除非可以使用nullptr作为有效参数调用函数.如果函数不需要修改参数,则传递const引用. 按值传递参数有几种用途. 如果您的函数需要创建参数的副本,最好通过传递值而不是在函数内创建副本来创建此副本.例如: void foo( widget const& w ) { widget temp( w ); // do something with temp } 而是使用 void foo( widget w ) // copy is made here { // operate on w itself } 这样做的好处还在于,如果可能,允许编译器使用move小部件,这通常比创建副本更有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |