gpt4 book ai didi

C++ operator= 重载有选择地工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:09:53 29 4
gpt4 key购买 nike

我似乎有一个可以间接工作的赋值运算符。我有一个包含两个 float x 和 y 的 Vector2 类。这是 operator= 方法:

Vector2 Vector2::operator=(const Vector2 &right)
{
Vector2 result;
result.x = right.x;
result.y = right.y;
return result;
}

在我拥有的实体的 onMove 方法中:

Vector2 newPosition = position + (speed * getSpeedFactor());

if (posValid(newPosition))
{
position.x = newPosition.x;
position.y = newPosition.y;
//position = newPosition;
}

其中 speedFactor 取决于帧率,而 posValid 是检查某个点是否在墙上或其他东西中。位置和速度也是 Vector2 的。第一个作业:

Vector2 newPosition = position + (speed * getSpeedFactor());

有效,并且使用代码我得到了预期/预期的行为,但是

position = newPosition;

没有影响,无论是在它自己上还是在 .x 和 .y 赋值之前或之后。

最佳答案

你的operator=()是错误的,它应该修改当前对象,而不是你创建的extra

Vector2& Vector2::operator=(const Vector2 &right) 
{
x = right.x;
y = right.y;
return *this;
}

注意:返回类型是一个引用,您返回的是对当前对象的引用,而不是它的拷贝(或像您的代码中那样的新对象的拷贝)。

它起作用的原因

Vector2 newPosition = ...;

因为这不是默认构造+赋值,而是复制构造调用。

关于C++ operator= 重载有选择地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11158140/

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