【发布时间】:2014-12-22 14:39:54
【问题描述】:
我有作业问题
在这些方法之后,v 包含什么?为什么?如果方法无效,请解释原因。
template <typename T> void reset1(MathVector<T> v) {v[0] = 0;}
template <typename T> void reset2(MathVector<T> &v) {v[0] = 0;}
template <typename T> void reset3(const MathVector<T> &v) {v[0] = 0;}
我以前的经验告诉我,第一个将保持向量不变,因为它不是按值传递而是通过副本传递,第二个将正确更改,第三个将无效,因为参数指定 const。
但是我很确定在 c++ 中数组总是按值传递,因为它不会自动调用复制构造函数或任何东西。我怀疑向量也可能如此,但我不确定。因此,如果是这种情况,第一个会更改向量,而第二个会无效,因为您试图对向量的指针进行操作,这没有意义?我不太确定这里
【问题讨论】:
-
"数组总是按值传递" - 它们不是,但这与这里无关,因为您正在传递一个类类型。
-
编译一组测试用例,一探究竟。实验是在一个小桶中对两只以上的小鸡进行。
标签: c++ templates methods vector constants