限制价值的好方法

时间:2012-09-20 12:48:34

标签: c++ performance code-standards

我的代码亮度限制为[0..255]。 并且由于某种原因进行了评估,因此我可以获得超出界限的价值。 我能做到

(if x>maxValue) x = maxValue;

 x = min(x, MaxValue);

(x > MaxValue) ? MaxValue : x;

但我想知道什么是好方法?如何通过较少的比较和良好的代码风格来限制值?

5 个答案:

答案 0 :(得分:2)

对x使用unsigned char而不是int,chars限制为[0,255]。虽然你必须检查是否有溢出,但这有点棘手。

答案 1 :(得分:1)

  

如何通过较少的比较和良好的代码风格来限制值?

一个比较最少,任何较小意味着没有比较。如果您需要,请查看Compute minimum without branching

为了好的风格,这是最好的 -

if (x > maxValue)
{
    x = maxValue;
}

答案 2 :(得分:0)

inline long clamp(long x, long min, long max){
    return x>max ? max : (x<min ? min : x);
}

你可以编写一个只接受0到255之间值的新类,并且可以隐式地转换为int,但使用clamp或max之类的东西就足够了。

答案 3 :(得分:0)

我猜:

(x > MaxValue) ? MaxValue : x;

相当于:

(if x>maxValue) x = maxValue;
else x = x;

我知道很有可能它会被优化掉,或者停止自我分配等等。所以本质上它与第一个if,只是语法糖涂层相同。

我会使用min,因为它会提供类型安全性,并有助于避免比较混合类型。

答案 4 :(得分:0)

就良好的编码风格而言,您可以创建自己的类来管理此值绑定要求。如果重载赋值运算符,则可以在那里进行比较。

修改 我想你可以将所有代码放在一个函数中。但我认为与类实例进行交互会更好。

BoundedInt x;
x = 300;
x.value(); // x == 255