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