我正在尝试确保int x
大于或等于0但小于1080(在这种情况下是屏幕尺寸)。
我想出了这个
int x = 123;
x = std::min(std::max(x, 0), 1080);
这看起来很难看。有没有更好的方法来实现这一目标?
答案 0 :(得分:8)
如果您将来居住,可以使用std::clamp
from C++17:
x = std::clamp(x, 0, 1080);
答案 1 :(得分:2)
天真的解决方案看起来也不错:
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);
答案 2 :(得分:1)
使用unsigned作为x的类型。这会自动将其限制为非负面。
然后你只需要调用std :: min,这对我来说至少是可口的。
构建一个在构造上采用int并且将转换运算符设置为int的类也是合理的,但需要相当多的样板。
答案 3 :(得分:-1)
为什么不做这样的事情?
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.