java - C++:按值传递对象的原因

标签 java c++ oop

在 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/

相关文章:

c++ - WaitForRequest 超时崩溃

java - 处理来自 Google Protocol Buffer 库的 IOException

java - ArrayList 显示数据库中的所有结果

c++ - 如何将gcc中的静态库与其他动态库链接起来?

c# - 面向对象的接口(interface)、抽象类、具体类问题

php - 是否有等效于 PHP 中的成员初始化列表?

matlab - 如何在 MATLAB 中将指针分配给对象的属性?

Java 8 DateTimeFormatter 忽略毫秒和区域

java - 如何让瓷砖空着

c++ - Eclipse C++ 错误