【问题标题】:Integer promotion, C++ and templates整数提升、C++ 和模板
【发布时间】: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::minstd::max 时,需要提供适当的类型以作为模板参数进行转换:

size_t const subcount = std::min<Offset>(count, treecap - offset);

要获得根据 C 整数提升规则计算类型的最小值/最大值,有必要知道对于左右输入类型的每种组合,类型是如何相关的,以及结果类型是什么.

我希望执行一个最小值/最大值,其行为与上面给出的 GCC 下的 C 示例相同,并且具有相同的提升(从而确保与 GCC 中的行为相同)。如何在 C++ 和/或 MSVC 中做到这一点?

请注意,在执行此“自然”最小/最大之后,我将立即numeric_casting 到预期的大小范围。

【问题讨论】:

标签: c visual-studio-2010 templates gcc c++11


【解决方案1】:

这里有一个非常好的实现,我已将其用于各种项目:http://www.oonumerics.org/blitz/traits.html

【讨论】:

  • 很遗憾这不是标准 C++ 的一部分,但它并不让我感到惊讶。 C++ 无法决定与 C 的兼容性,并且生活在一个令人讨厌的无人区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 2018-02-27
  • 1970-01-01
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多