限制值的好方法
Nice way to make a limit to the value
本文关键字:方法 更新时间:2023-10-16
我有一个像素亮度限制为 [0..255] 的代码。并且出于某种原因对其进行了评估,因此我可以在边界之外获得值。我能做到
(if x>maxValue) x = maxValue;
或
x = min(x, MaxValue);
或
(x > MaxValue) ? MaxValue : x;
但我想知道什么是好方法?如何限制一个值,减少比较和良好的代码风格?
对 x 使用无符号字符而不是 int,字符限制为 [0, 255]。这有点棘手,因为您必须检查溢出。
如何限制一个值,减少比较和良好的代码风格?
一个比较是最少的,任何更少意味着没有比较。如果需要,请查看不带分支的最小计算。
对于好的风格,这是最好的——
if (x > maxValue)
{
x = maxValue;
}
inline long clamp(long x, long min, long max){
return x>max ? max : (x<min ? min : x);
}
您可以编写一个新类,该类仅接受 0 到 255 之间的值,并且可以隐式转换为 int,但使用 clamp 或 max 之类的东西就足够了。
就良好的编码风格而言,您可以创建自己的类来管理此值边界要求。 如果重载赋值运算符,则可以在那里进行比较。
编辑:我想你可以把所有代码放在一个函数中。 但我认为与类实例交互会更好。
BoundedInt x;
x = 300;
x.value(); // x == 255
我猜:
(x > MaxValue) ? MaxValue : x;
相当于:
(if x>maxValue) x = maxValue;
else x = x;
我知道它很有可能被优化等,或者停止自我分配等。所以本质上它与第一个 if 相同,只是语法糖衣。
我会使用 min
,因为它将提供类型安全性,并有助于避免比较混合类型。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法