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 中执行此操作?
请注意,在执行此“自然”最小/最大后,我将立即numeric_cast
ing 到预期的大小范围。
最佳答案
这里有一个非常好的实现,我已经将其用于各种项目:http://www.oonumerics.org/blitz/traits.html
关于c - 整数提升、C++ 和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106349/