使用非const参数将const传递给函数

时间:2017-03-30 09:48:28

标签: c++ reference const

我正在关注加速C ++的书,但我对他们提供的源代码感到困惑。我的困惑涉及函数react-native run-iosdouble grade(double midterm, double final, const vector<double>& hw)。 它在评论中说double median(vector<double> vec)函数不会复制它的参数,因为grade函数的作用。为什么会这样? 根据我的理解,你不能将const传递给非const,因为需要写访问权限。

以下是代码:

median

2 个答案:

答案 0 :(得分:1)

看看这一行:

return grade(midterm, final, median(hw));

hw这里是对向量的const引用,它被传递给median。虽然您无法通过const引用修改对象,但您仍然可以通过const引用复制它。因此,由于median需要更改vector(通过对其进行排序),它会为自己创建一个副本(副本将隐式创建在引擎盖下)并对其进行排序。

答案 1 :(得分:1)

  

为什么会这样?根据我的理解,你不能将const传递给   非const因为需要写访问。

是和否,你不能写一个const变量是正确的,但这不是在这里发生的事情。

return grade(midterm, final, median(hw));

此处median的电话为我们工作。 median期望std::vector并且编译器将其传递给引擎。它复制const &引用的向量,并将该副本传递给median。请记住,编译器只需要读取访问权限而不是写入,这正是hw给我们提供的。