gpt4 book ai didi

c# - 乘法运算符重载修改原始变量(C#)?

转载 作者:行者123 更新时间:2023-12-03 21:38:18 25 4
gpt4 key购买 nike

我正在将矩阵库作为一个学习项目,在这样做的过程中,我重载了 * 运算符来执行矩阵乘法。我还重载了它来处理标量乘法(将矩阵的每个元素乘以 double )。我的问题是,当运行以下代码时,test2 和 test 都被修改,这是不希望的。

Matrix test2 = 2 * test;

我确定这是一个问题,因为 Matrix 是一个类,因此通过引用传递,但没有将 Matrix 更改为结构(我认为这不合适,并且在尝试时不似乎不起作用),我看不出有任何解决方法。我该如何解决这个问题?

实际的操作符代码是

public static Matrix operator *(Matrix m1, double c)
{
Matrix ret = m1;

for (long i = 0; i < ret.Width; i++) // Iterate over the rows.
{
for (long p = 0; p < ret.Height; p++) // Iterate over the columns.
{
ret[i, p] *= c;
}
}

return ret;
}

最佳答案

您不应使用您的代码修改现有矩阵。签名尖叫它正在创建一个矩阵并返回它。

我不确定您的复制方法/构造函数是什么,但是不要m1 分配给ret;您应该制作 m1副本,修改副本,然后返回副本,留下 m1 未更改

public static Matrix operator *(Matrix m1, double c)
{
Matrix ret = m1.Clone(); //not sure what your "copy" method is

//do the multiplication on ret

return ret;
}

关于c# - 乘法运算符重载修改原始变量(C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17787924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com