C定义了有关整数提升的各种规则,这里是描述其工作原理的great answer。
在GCC中你可以这样做:
#define max(a,b) \
({ __typeof__ (a) _a = (a); \
__typeof__ (b) _b = (b); \
_a > _b ? _a : _b; })
将评估上述C规则确定的类型的最大值。
在使用混合类型使用std::min
或std::max
时,有必要提供适当的类型作为模板参数:
size_t const subcount = std::min<Offset>(count, treecap - offset);
要获得根据C整数提升规则评估类型的最小值/最大值,对于左右输入类型的每个组合,有必要知道类型的关联方式以及结果类型的类型。
我希望执行最小/最大,具有与上面给出的GCC下的C样本相同的行为,并且具有相同的促销(从而确保与GCC中相同的行为)。如何在C ++和/或MSVC中执行此操作?
请注意,执行此“自然”min / max后,我将numeric_cast
达到预期的尺寸范围。