web-dev-qa-db-ja.com

uint64_tの最大値を表すマクロ

uint64_tUINT_MAXの場合なので、unsigned intの最大値を表すマクロを探しています。つまり、この値が(1 << 64)-1であることを保証する必要があります。

UINT64_MAXを使用しようとしましたが、g ++でコンパイルすると次のようになります。

'UINT64_MAX' was not declared in this scope

#define __STDC_LIMIT_MACROSを使用する前に、コードにこの行UINT64_MAXがあることを述べておきます。

それについてウェブ上で有用な情報を見つけられないことに私は驚いた。

23
Subway

cstdintヘッダーを移植性のある方法で使用することは、かなり困難な場合があります(一部のMSVC実装にはありません)。同時に、numeric_limits::max()constexprなしで使用するのは困難な場合があり、実際には_uint64_t_を使用する必要はありません。これらのことをあまり気にしない場合は、std::numeric_limits<uint64_t>::max()がおそらくうまくいくでしょう。

Boost.Integer にはcstdintの実装があり、一定の最大値を取得するための追加の特性クラスが付属しています。準拠したcstdintの実装でもマクロ_UINT64_MAX_を提供する必要がありますが、ブーストについてはよくわかりません。

19
pmr