c - 整数提升、C++ 和模板

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

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 到预期的大小范围。

最佳答案

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

关于c - 整数提升、C++ 和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106349/

相关文章:

c - 无法更改进程的 gid

c - C 中一维字符串数组与二维字符串数组的比较

c++ - 类型推导模板函数c++

c++ - 如何使用成员函数指针作为模板 arg 实例化类

计算数组中当前元素右侧的更大元素

android - iOS和Android C套接字编程+ GUI

c++ - 如何在MFC中使用Document/View架构

c++ - 乱序模板参数规范/推导是否可能?

c++ - 尝试从 Visual Studio 命令提示符调用 lib.exe

visual-studio-2010 - 用于刷新 Chrome 选项卡的 VisualStudio 2010 Post-Build 事件?