This question already has answers here:
Fastest way to clamp a real (fixed/floating point) value?

(14 个回答)


6年前关闭。




我想创建一个简单的结构来存储颜色的 RGB 值。 r、g 和 b 应该是 [0,1] 中的双数。
struct Color
{
  Color(double x): r{x}, g{x}, b{x} {
    if (r < 0.0) r = 0.0;
    if (r > 1.0) r = 1.0;
    if (g < 0.0) g = 0.0;
    if (g > 1.0) g = 1.0;
    if (b < 0.0) b = 0.0;
    if (b > 1.0) b = 1.0;
  }
}

有没有比使用 if 语句更好的方法?

最佳答案

只需编写一个函数来钳位:

double clamp(double val, double left = 0.0, double right = 1.0) {
    return std::min(std::max(val, left), right);
}

并在您的构造函数中使用它:
Color(double x)
    : r{clamp(x)}
    , g{clamp(x)}
    , b{clamp(x)}
{ }

关于c++ - struct 成员的限制值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30016062/

10-08 21:33