我有一个函数,它被赋予一个缓冲区,可以接受填充size_t
长度;但是,填充它的实际调用需要int
作为最大长度。
因此,如果参数不能适合整数,我希望它被截断为可以适合的最大值;因为我无论如何都无法获得更多数据。
我可以这样做
int truncatedMaxLen = static_cast<int>(std::min<std::size_t>(maxLength, (std::numeric_limits<int>::max)()));
任何不那么丑陋的方式?
答案 0 :(得分:2)
无分支的方式是:
int truncatedMaxLen = maxLength;
truncatedMaxLen |= (truncatedMaxLen < maxLength) * std::numeric_limits<int>::max();
对于无符号类型,它更好,因为没有符号位可以处理:
unsigned truncatedMaxLen = maxLength;
truncatedMaxLen |= -(truncatedMaxLen < maxLength);