所以我一直在用C++写一个小的数学库,当处理标量乘以 vector 时,在尝试执行此操作时遇到一些问题

Vect V2;
Vect V3;
float S;

Vect V1 = V2 + S * (V2 - V3);

我在重载运算符*中收到的Vect值是一个新的Vect对象,而不是操作的(V2-V3)部分的结果。这是代码的其他相关部分。如果我在调试后进行该操作,则两个重载的运算符可以自己正常工作,但不能一个接一个地工作。

电压
Vect &operator - (const Vect &inVect);
friend const Vect operator*(const float scale, const Vect &inVect);

Vect.cpp
Vect &Vect::operator - (const Vect &inVect)
{
    return Vect (this->x - inVect.x,this->y - inVect.y,this->z - inVect.z, 1);
}

const Vect operator*(const float scale, const Vect &inVect)
{
    Vect result;

    result.x = InVect.x * scale;
    result.z = InVect.y * scale;
    result.y = InVect.z * scale;
    result.w = 1;

    return result;
}

我还重载了+和=运算符,它们按预期方式工作,我遇到的唯一问题是上述问题。

最佳答案

operator-中,创建一个临时Vect并返回对该临时文件的引用。临时文件在return语句的末尾被销毁,返回的引用悬空了。使用该引用执行任何操作都会导致不确定的行为。

相反,您的operator-应该按值返回Vect:

Vect Vect::operator - (const Vect &inVect)
{
  return Vect (this->x - inVect.x,this->y - inVect.y,this->z - inVect.z, 1);
}

关于c++ - 在C++中使用重载*运算符与括号结果相乘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14788238/

10-10 23:19