在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 widget
如果可能的话,这通常比创建副本更有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)