これは常に真であることが保証されていますか:
std::numeric_limits<int>::max() == INT_MAX
C++ 標準はそれについて何と言っていますか? これを明示的に述べている標準の参照を見つけることができませんでしたが、それらは同等である必要があることを読み続けています。
C99 (少なくとも
long long
一部) と C++98 の両方を実装するコンパイラの C++98 標準にない C99 型はどうですか? これが常に当てはまるという保証があるかどうかはわかりません。std::numeric_limits<unsigned long long>::max() == ULLONG_MAX
これは合理的な仮定ですか?
4 に答える
C++ 2003 標準の私のコピーでは、numeric_limits<>::max()
およびmin()
テンプレートが値を返すと述べています。
CHAR_MIN, SHRT_MIN, FLT_MIN, DBL_MIN,
等に相当します。
CHAR_MAX, SHRT_MAX, FLT_MAX, DBL_MAX,
等に相当
ただし、それらは脚注にあります。ISO/IEC 指令のパート 3: 「[脚注] には要件を含めないでください。」ただし、表または図への脚注は必須の場合があります。
1 つ目は true であることが保証されている必要があります: std::numeric_limits<int>::max() == INT_MAX
.
ただし、unsigned long long については、コンパイラ/ライブラリがそれらをサポートする必要がないため、保証はありません。しかし...
コンパイラとライブラリが unsigned long long をサポートしている場合は、要求方法に関係なく型の制限が同じになるため、等しいはずです。
はい、これは合理的な仮定です。
long long データ型は C++ にはまだ存在しないため、C++ では long long データ型が保証されないことは明らかです。それらが存在する場合、それらがどのように動作するかはコンパイラ次第であり、コンパイラによって文書化されるべきです。
私の知る限り、これはどちらの標準にも含まれていませんが、特に同じスイートまたはベンダーのコンパイラを使用している場合は、当然のことです。たとえば、G++ 4.3 は単純に in の #defined 値を使用し<limits>
ます<climits>
。