gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:10 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com