我应该如何找到未知类型的最大整数值? 有没有比这更有效的方法:
template<class T>
T test(T i) {
if (((T)-1) > 0)
return -1;
T max_neg = ~(1 << ((sizeof(T)*8)-1));
T all_ones = -1;
T max_pos = all_ones & max_neg;
return max_pos;
}
我应该如何找到未知类型的最大整数值? 有没有比这更有效的方法:
template<class T>
T test(T i) {
if (((T)-1) > 0)
return -1;
T max_neg = ~(1 << ((sizeof(T)*8)-1));
T all_ones = -1;
T max_pos = all_ones & max_neg;
return max_pos;
}
使用std::numeric_limits<T>::max()
。自C++11以来,该函数是constexpr
的,因此在编译时计算。
std::numeric_limits<T>::max()
是一个很好的起点。"std::numeric_limits<T>::max()
或者如果你喜欢boost库:boost::integer_traits<T>::max()
。
-1
测试和返回是可以的,但是对于max_neg
:首先,CHAR_BIT
可能大于8
,而且你将一个1
移入了_sign bit_,我认为这是未定义的;对于all_ones
:-1
可能不是“全部为1”,例如在一种补码或符号-幅度机器上。至于逻辑:似乎max_neg
已经等于max_pos
。 - gx_