限制整数范围

Limit integer to bounds

我试图确保 int x 大于或等于 0 但小于 1080(在本例中为屏幕尺寸)。

我想到了这个

int x = 123;
x = std::min(std::max(x, 0), 1080);

这看起来很难看。有没有更好的方法来实现这个?

使用无符号作为 x 的类型。这会自动将其约束为非负数。

然后你只剩下对 std::min 的调用,这至少对我来说是可以接受的。

构建一个 class 在构造时采用 int 并具有到 int 的转换运算符也是合理的,但需要相当多的样板文件。

以后如果住的话可以用std::clamp from C++17:

x = std::clamp(x, 0, 1080);

为什么不做这样的事情呢?

int x = 123; /* Or some arbitrary number */
bool bIsInRange = (x >= 0) && (x < 1080);
if(!bIsInRange){
   std::cout << "Variable 'x' is not between 0 and 1080." << std::endl;
   return 1;
} // else, x is fine. Continue operations as normal.

天真的解决方案看起来不错:

int x = 123;
if (x < 0)
    x = 0;
if (x > 1080)
    x = 1080;

或将所有内容包装在一个函数中:

template<typename T>
T between(const T x, const T min, const T max){
   if (x < min)
       return min;

   if (x > max)
       return max;

   return x;
}

int x = between(123, 0, 1080);