在 Java 中,所有包含适当对象的变量实际上都是引用(即指针)。因此,以这些对象作为参数的方法调用总是“通过引用”。调用修改对象状态的方法也会影响原始对象(在调用方)。
C++ 不同:这里的参数可以按值传递或按引用传递。在按值传递的对象上调用增变器方法不会影响原始对象。 (我想按值调用会创建对象的本地拷贝)。
所以我对此的第一 react ——从 Java 到 C++——是:在使用对象作为参数时总是使用指针。这给了我期望从 Java 获得的行为。
但是,如果不需要修改方法主体中的对象,也可以使用“按值调用”。是否有理由这样做?
最佳答案
ALWAYS use pointers when using objects as arguments
不,在 C++ 中总是通过 reference 传递,除非你的函数可以用 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
如果可能,这通常比创建拷贝更有效。
关于java - C++:按值传递对象的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269355/