42

C99 では、stdint.handを含めることで、データ型UINT32_MAXだけでなくuint32_tデータ型も取得できます。ただし、C++ ではUINT32_MAX定義されます。__STDC_LIMIT_MACROSをインクルードする前に定義できますstdint.hが、既に自分自身をインクルードした後に誰かが私のヘッダーをインクルードしている場合、これは機能しませんstdint.h

では、C++ では、a で表現可能な最大値を見つける標準的な方法は何uint32_tですか?

4

6 に答える 6

68

についてはわかりませんuint32_tが、基本的な型 ( boolcharsigned charunsigned charwchar_tshortunsigned shortint、および)unsigned intについてlongunsigned long、経由floatでテンプレートを使用できます。doublelong doublenumeric_limits#include <limits>

cout << "Minimum value for int: " << numeric_limits<int>::min() << endl;
cout << "Maximum value for int: " << numeric_limits<int>::max() << endl;

上記uint32_t#defineいずれかの場合、このコードはそのままで動作するはずです

cout << "Maximum value for uint32_t: " << numeric_limits<uint32_t>::max() << endl;
于 2009-09-24T12:28:51.857 に答える
28

std::numeric_limits<T>::max()type の最大値を定義しますT

于 2009-09-24T12:28:01.417 に答える
22

uint32_t は常に 32 ビットであり、常に符号なしであるため、手動で安全に定義できます。

#define UINT32_MAX  (0xffffffff)

あなたもできる

#define UINT32_MAX  ((uint32_t)-1)
于 2009-09-24T16:51:48.357 に答える
1

代わりにコンパイラ コマンド ラインでシンボル#includeを定義するようにビルド プロセスを変更することで、順序の問題を解消できる場合があります。__STDC_LIMIT_MACROS

cxx -D__STDC_LIMIT_MACROS ...

もちろん、ヘッダー#undefがこのシンボルの場合は、まだ問題があります。

また、使用している標準ライブラリ実装の作成者は、ユーザーがその特定のシンボルを設定することを意図していない可能性があります。ユーザーが C++ で C99 型を有効にするために使用するコンパイラ フラグまたは別のシンボルが存在する可能性があります。

于 2009-09-24T17:39:24.247 に答える