C++编译时整数变量的最小值和最大值

Har*_*vey 3 c++ templates compile-time

是否有一种简单,干净的方法可以在编译时确定某些变量(此时是未知的)整数变量或类型的最大值和最小值?使用模板?

例如:

// Somewhere in a large project is:
typedef unsigned long XType;
typedef char YType;
// ...

// Somewhere else
   XType a;
   YType b;
   LONGLONG c,d,e,f;
   c = MinOfType(a); // Same as c = 0;
   d = MaxOfType(a); // Same as d = 0xffffffff;
   e = MinOfType(b); // Same as e = -128;
   f = MaxOfType(b); // Same as f = 127;
// Also would be nice
   e = MinOfType(YType); // Same as e = -128; // Using the typename directly
// Or perhaps
   e = MinOfType<YType>(); // Same as e = -128; // Using the typename directly
Run Code Online (Sandbox Code Playgroud)

Nav*_*een 14

使用std :: numeric_limits,它就是这种类型的要求.您可以查看此示例以了解用法.

  • AFAIK,那些不是*编译时*,但是(如果OP自己意识到他想要的是什么). (5认同)
  • RaphaelSP:如果实际上需要编译时,例如模板参数或枚举器,那么启用哪种优化并不重要 - 无论是表达式还是不表达式.与C++ 0x中的constexprs相比. (5认同)