C++ 为什么在C++;?

C++ 为什么在C++;?,c++,call-by-value,C++,Call By Value,当引用调用更有效时,将参数作为值调用的目的是什么?(对于非基本数据类型。) 另外,如果要添加const标记以按引用调用参数,这样它们就不会被修改,该怎么办 是否存在使用按值调用而不是按引用调用有益的情况?我保存的一段摘录,您可能会发现它很有用(来自) 不使用引用呼叫可能有两个原因:副作用和隐私。不必要的副作用通常是由于无意中更改了“按引用调用”参数而引起的。此外,在大多数情况下,您希望数据是私有的,并且调用函数的人只有在您需要时才能进行更改。因此,最好在默认情况下使用按值调用,并且只有在预期数据

当引用调用更有效时,将参数作为值调用的目的是什么?(对于非基本数据类型。)

另外,如果要添加const标记以按引用调用参数,这样它们就不会被修改,该怎么办


是否存在使用按值调用而不是按引用调用有益的情况?

我保存的一段摘录,您可能会发现它很有用(来自)

不使用引用呼叫可能有两个原因:副作用和隐私。不必要的副作用通常是由于无意中更改了“按引用调用”参数而引起的。此外,在大多数情况下,您希望数据是私有的,并且调用函数的人只有在您需要时才能进行更改。因此,最好在默认情况下使用按值调用,并且只有在预期数据更改时才使用按引用调用


我保存的摘录,你可能会觉得有用(来自)

不使用引用呼叫可能有两个原因:副作用和隐私。不必要的副作用通常是由于无意中更改了“按引用调用”参数而引起的。此外,在大多数情况下,您希望数据是私有的,并且调用函数的人只有在您需要时才能进行更改。因此,最好在默认情况下使用按值调用,并且只有在预期数据更改时才使用按引用调用


在任何情况下,无论出于何种原因,函数体已经需要参数的副本,通常按值传递该参数更有效,因为在某些情况下,编译器实际上可以消除该副本。

在任何情况下,无论出于何种原因,函数体已经需要参数的副本,通常,按值传递该参数更有效,因为在某些情况下,编译器实际上可以消除复制。

按引用调用并不总是比按值调用更有效。传递整数而不是对整数的引用通常是一种间接方法。根据参数列表的不同,一些值可以在寄存器中传递,而不必在内存中的某个位置间接地取消引用。按引用调用并不总是比按值调用更有效。传递整数而不是对整数的引用通常是一种间接方法。根据参数列表的不同,一些值可以在寄存器中传递,而不是间接地在内存中的某个地方取消引用

通过引用调用是否更有效

这远非必然:有些情况下,按值传递参数比按引用传递参数更有效,因为传递的数据“少于指针值”

是否存在使用按值调用而不是按引用调用有益的情况

按值传递意味着复制。当您希望确保获得对象的副本而不是对象本身时,可以使用它。例如,如果要确保对象不会与使用它的代码同时修改,请编写一个函数,按值接收其参数

通过引用调用是否更有效

这远非必然:有些情况下,按值传递参数比按引用传递参数更有效,因为传递的数据“少于指针值”

是否存在使用按值调用而不是按引用调用有益的情况


按值传递意味着复制。当您希望确保获得对象的副本而不是对象本身时,可以使用它。例如,如果要确保对象不会与使用它的代码同时被修改,编写一个按值接收其参数的函数。

当原始数据不应更改且引用的副本将在函数内部创建时,通常使用此按值调用。

当原始数据不应更改且引用的副本将被复制时,通常使用此按值调用无论如何都要在函数内部创建。

一个例子是变量是可变的,这意味着它可以被另一个执行线程或程序外部的某些东西(如硬件寄存器)更改


按值传递时,在传递给函数之前,将获取变量的副本或快照。通过引用传递时,函数代码将在访问变量时获取值。这可能会导致不同的值,具体取决于可变变量是否发生变化以及何时发生变化

一个例子是变量是易变的,这意味着它可以被另一个执行线程或程序外部的某些东西(如硬件寄存器)更改


按值传递时,在传递给函数之前,将获取变量的副本或快照。通过引用传递时,函数代码将在访问变量时获取值。这可能会导致不同的值,具体取决于可变变量是否发生变化以及何时发生变化

有些情况下,不管效率如何,传递值都是您想要的——如果您希望能够传递某个内容并对其进行操作/修改而不影响原始内容,那么传递值可能正是正确的选择,如果传递值较慢,则传递值较慢

一个真实的例子,考虑我们正在处理PrimRythyQueQue-但是在某些情况下,我们希望将优先级队列的当前内容写入日志(按顺序)。从优先级队列中读取是破坏性的,但我们需要原封不动的原始队列。一个显而易见的解决方案是:按值将优先级队列传递给日志函数。日志函数从队列中进行破坏性读取,但完成后,周围的代码仍保留原始队列un modif