11

今日、クラス内で次のコードを見ました。

static const uint32_t invalid_index = ~uint32_t();

私の質問は、uint32_tデストラクタの戻り値とは何ですか?なぜそれが役立つのですか?

4

4 に答える 4

16

これはデストラクタではなく、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
于 2012-08-02T21:03:05.350 に答える
8

まず第一に、すでに多くの人が言及しているように、あなたが見たコードは、

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.
于 2012-08-02T21:20:21.470 に答える
3

これはデストラクタではなく、バイナリではありません。ここで、無効なインデックスは ~uint32_t(0) に等しくなります。これは、すべてのビットが設定された 32 ビットの符号なし整数です。つまり、0xffffffff です。

于 2012-08-02T21:03:15.980 に答える
1

これはビット単位のNOTであり、1 の補数 (例: ~1011 = 0100) を見つけるために、または 2 の補数 (例: [~1011] + 0001 = 0101) を見つけようとするときの中間ステップとして使用できます。

于 2012-08-02T21:08:28.267 に答える