我对 c 和 c++ 还很陌生,关于将参数传递给函数,我有以下问题,我认为最好在这里提问,直接从大师那里获得知识的来源。
什么时候应该按值传递参数,什么时候应该按引用传递?现实世界中最常用的方法是什么?
提前致谢。
我对 c 和 c++ 还很陌生,关于将参数传递给函数,我有以下问题,我认为最好在这里提问,直接从大师那里获得知识的来源。
什么时候应该按值传递参数,什么时候应该按引用传递?现实世界中最常用的方法是什么?
提前致谢。
首选通过引用传递,通常是以下一项或多项:
const
,一定要这样做,但无论如何都要经常这样做,具体取决于此列表的其余部分)按值传递:
如果参数大于 register 并且您没有修改它,则应将其作为 const 引用传递。当然,也有一些例外情况,您稍后会创建一个副本左右,但总的来说,这条规则是正确的。
对于较小的类型,没有关系(即 const int& 或 int)应该给出相同的结果。为了安全起见,无论如何都要按值传递它们。对于通用代码,您可以使用Boost Call Traits库,它会自动决定是使用按引用还是按值。
如果您想修改对象,将其作为引用传入允许您就地修改它,这通常比返回一个新对象并覆盖原始对象要快。
按价值传递,除非你有理由不这样做。不这样做的理由:
请注意,对于上面的#2,即使对象很大,您仍可能希望按值传递。按值传递更简单,因此更易于维护,除非您有理由相信按值传递会在代码中产生实际问题,否则按 const 引用传递可能是过早的微优化。例如,如果您的函数采用一个 64 字节(甚至 64k 字节)的参数,但该函数每天只调用一次,则实际上没有理由通过 const 引用传递。它几乎不会为您节省任何费用。首先在发布模式下分析您的代码,然后进行优化。
默认情况下,通过 const 引用传递,除了:
1)如果你想要一个输入/输出或输出参数 - 一个被函数改变的参数。在这种情况下,请使用非常量引用。2) 如果您传递的是整数、浮点数或指针 - 按值传递。
通常,当您需要更改参数并且不希望调用者必须进行复制时,您应该使用按值传递。您应该在其他任何地方都使用对 const 的引用传递。
然而,这实际上归结为“C++ 作为语言的联合”位——例如,如果您正在编写 STL 算法,您需要使用按值传递,因为迭代器和仿函数近似指针和函数指针。
这主要取决于您的需求。如果您想看到对传递的变量所做的更改反映在当前函数中,您肯定会通过引用传递,但如果您严格要求对传递的变量进行任何更改变量未反映在您当前的函数中,请选择“按值传递”。
谢谢, 玛维亚