【发布时间】:2011-05-05 14:46:28
【问题描述】:
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_casting 到预期的大小范围。
【问题讨论】:
-
您是否在寻找a
promotetemplate? -
@James McNellis:是这样的
标签: c visual-studio-2010 templates gcc c++11