未知の型の最大整数値を見つけるにはどうすればよいですか? は、これよりもより効率的な何かがあります:未知の整数型の最大値を求める方法
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;
}
注:指定されたコードが間違っている可能性があります。最初の '-1'テストとunsigned型の返答はOKですが、' max_neg'の場合、最初の 'CHAR_BIT'は' 8'以上で、とにかく '1'を_signビットにシフトしています。私は未定義だと思う。 'all_ones'の場合:' -1'は、例えば1の補数や符号と大きさのマシンでは「すべてのもの」ではありません。ロジックについては、 'max_neg'はすでに' max_pos'に等しいと思われます。 –