我想将x
添加到y
(其中y
是类A
的属性)
void A::f1(char x)
{
y += x;
}
但是,存在溢出的风险。我认为(我还没有对它们进行测试)以下两个函数应该可以防止任何溢出,但它们看起来非常复杂(并且对于f3
的关注不是很快。)
void A::f2(char x)
{
if (x > 0)
{
if (CHAR_MAX - x < y)
{
y = CHAR_MAX;
} else if (CHAR_MIN + x > y)
{
y = CHAR_MIN;
} else
{
y += x;
}
} else
{
if (CHAR_MAX + x < y)
{
y = CHAR_MAX;
} else if (CHAR_MIN - x > y)
{
y = CHAR_MIN;
} else
{
y += x;
}
}
}
void A::f3(char x)
{
if (x < 0)
{
for (int i = 0 ; i < x;i++)
{
if (y == CHAR_MIN)
{
break;
}
y--;
}
} else
{
for (int i = 0 ; i < x;i++)
{
if (y == CHAR_MAX)
{
break;
}
y++;
}
}
}
有更好的解决方案吗?