gpt4 book ai didi

c++ - 在 C++ 中使用重载 * 运算符与括号结果相乘

转载 作者:行者123 更新时间:2023-11-30 01:23:35 24 4
gpt4 key购买 nike

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

Vect V2;
Vect V3;
float S;

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

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

vector .h

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/

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