如何阻止此添加重载更改参数的值?
How can i stop this addition overload from changing the parameter's value?
VecXd &operator+=(VecXd<T> &addend){
if(dimension != addend.dimension)
cout << "The vector dimensions are not equal";
else{
for(int i=0; i< dimension; i++)
vector[i] = vector[i] + addend.vector[i];
}
return *this;
}
friend VecXd &operator+(VecXd<T> &vec, VecXd<T> &addend){
return vec+=addend;
}
当做 a + b 时,第一个"a"也会改变总和。我认为通过使用引用,我不会影响原始向量。如何在不更改"a"的情况下执行此操作?
只需按值而不是按引用将vec
传递给operator+
。或者,通过const
引用传递它并制作副本。另外,不要从operator+
返回引用 - 没有对象可供您返回引用。
friend VecXd operator+(const VecXd<T> &vec, const VecXd<T> &addend){
VecXd<T> copy(vec);
return copy+=addend;
}
添加产生的对象必须是临时的,因为没有永久的位置可以放置它。因此,您无法通过引用返回它。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 挂起的 std::将来获取 std::异步与shared_from_this参数阻止破坏它
- 如果参数条件为 true,则阻止执行返回函数
- std::enable_if 和模板别名,阻止用户填写 std::enable_if 参数
- 如何阻止此添加重载更改参数的值?
- 从类别上防止或阻止使用特定参数实例化对象
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 正在阻止模板参数隐式转换
- 依赖于参数的查找——何时完成,搜索什么,以及如何强制(或阻止)它