我有一个函数,它被赋予一个缓冲区,该缓冲区接受填充到 size_t
长度;然而,填充它的实际调用需要一个 int
作为最大长度。
因此,如果参数不能放入整数中,我希望将其截断为可以放入的最大值;因为无论如何我都无法获得更多数据。
我能做到
int truncatedMaxLen = static_cast<int>(std::min<std::size_t>(maxLength, (std::numeric_limits<int>::max)()));
有什么不那么丑陋的方法吗?
最佳答案
无分支方式是:
int truncatedMaxLen = maxLength;
truncatedMaxLen |= (truncatedMaxLen < maxLength) * std::numeric_limits<int>::max();
对于无符号类型,它更好,因为没有符号位需要处理:
unsigned truncatedMaxLen = maxLength;
truncatedMaxLen |= -(truncatedMaxLen < maxLength);
关于c++ - 截断整数的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255725/