gpt4 book ai didi

c++ - 将一个对象分配给另一个对象后,为什么两个对象不一样?

转载 作者:行者123 更新时间:2023-11-27 22:37:30 25 4
gpt4 key购买 nike

<分区>

我们的 vector 类中有一些奇怪的错误行为。它给我们上了宝贵的一课。

class Vector3D
{
float x, y, z, w;
public:
Vector3D( float ax, float ay, float az, float aw )
: x(ax), y(ay), z(az), w(aw)
{}
Vector3D( float ax, float ay, float az ) // for when you don't care about w
: x(ax), y(ay), z(az)
{}

void Assign( const Vector3D& rhs )
{
x = rhs.x;
y = rhs.y;
z = rhs.z;
w = rhs.w;
}
bool operator==( const Vector3D& o )
{
return (x==o.x && y==o.y && z==o.z && w==o.w);
}
// lots more stuff
}

int main()
{
Vector3D a(1.0f,2.0f,3.0f);
Vector3D b(4.0f,5.0f,6.0f);

a.Assign(b);
bool result=(a==b); // Expected: true. Actual: false, sometimes
}

一段时间以来,Assign 函数似乎存在错误。我们会用它来将一个 vector 的值复制到另一个 vector ,但稍后代码将无法匹配我们知道应该相同的点。设置了数据断点,但未能命中。头都被抓破了。最终,我们将代码添加到 Assign 的末尾,它会立即调用 operator== 来检查两个 vector 是否相同……但事实并非如此。

出了什么问题?

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