gpt4 book ai didi

c++ - float 分配不正确

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

我有以下类(class)

class Viewport
{
public:
Viewport();
~Viewport();

void setSize(float x, float y);

private:
float _X;
float _Y;
};

void Viewport::setSize(float x, float y)
{
//Conditionals used to make sure that the viewport stays inside the [0.0f, 1.0f] range

if(x < 0.0f)
_X = 0.0f;
else if(x > 1.0f)
_X = 1.0f;
else
_X = x;

if(y < 0.0f)
_Y = 0.0f;
else if(y > 1.0f)
_Y = 1.0f;
else
_Y = y;

}

然后我创建视口(viewport) vector

Viewport vps[3];

uint _NumCascades = 3;

for(uint i = 0; i < _NumCascades; i++)
vps[i].setSize(i * (1.0f/_NumCascades), 0.0f);

_X = x;i == 1i==2 时会发生奇怪的错误,因为 _X 被赋予值 1051372203 而不是 0.33333334f

最佳答案

您的所有属性,尤其是 _X 和 _Y,都是为编译器保留的,并且编译器将 _X(因为它太短了)用于其他用途并使您的代码混淆并非不可能。

C++ 语言为实现保留了以下划线开头的名称子集。在这种情况下,在所有范围/案例中都保留下划线和前导资本。规则并不是非常复杂,但为了防止意外使用保留名称,最简单的方法是完全避免在标识符上使用前导下划线。

关于c++ - float 分配不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215827/

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