我有一个函数,该函数提供了一个缓冲区,该缓冲区可接受被填充为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/

10-11 04:14