今日、クラス内で次のコードを見ました。
static const uint32_t invalid_index = ~uint32_t();
私の質問は、uint32_t
デストラクタの戻り値とは何ですか?なぜそれが役立つのですか?
今日、クラス内で次のコードを見ました。
static const uint32_t invalid_index = ~uint32_t();
私の質問は、uint32_t
デストラクタの戻り値とは何ですか?なぜそれが役立つのですか?
これはデストラクタではなく、value-initializedに適用されるビット単位NOT
の演算子です。 uint32_t
値が初期化された整数型は0
であるため、 のビット単位NOT
を取得しています0
。
に似ている:
uint32_t x = uint32_t(); // 32 0's in binary form
uint32_t y = ~x; // 32 1's in binary form
まず第一に、すでに多くの人が言及しているように、あなたが見たコードは、
static const uint32_t invalid_index = ~uint32_t();
デストラクタ呼び出しではなく~
、型のデフォルト値に適用されるビット単位の「not」 uint32_t()
、つまり~(uint32_t(0))
.
さて、あなたの質問に、
私の質問は、uint32_t デストラクタの戻り値は何ですか?なぜそれが役立つのですか?
疑似デストラクタの戻り値の型(実際のデストラクタではなく、デストラクタ呼び出しと同じ表記の何もしない操作です) はvoid
であり、主に型がわからない汎用プログラミングに役立ちます。
例:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
これはデストラクタではなく、バイナリではありません。ここで、無効なインデックスは ~uint32_t(0) に等しくなります。これは、すべてのビットが設定された 32 ビットの符号なし整数です。つまり、0xffffffff です。
これはビット単位のNOTであり、1 の補数 (例: ~1011 = 0100) を見つけるために、または 2 の補数 (例: [~1011] + 0001 = 0101) を見つけようとするときの中間ステップとして使用できます。