Возвращаемое значение деструктора uint32_t

Сегодня я увидел этот код внутри класса:

static const uint32_t invalid_index = ~uint32_t();

Мой вопрос: что такое возвращаемое значение деструктора uint32_t и почему оно полезно?

Ответ 1

Это не деструктор, а оператор побитовый NOT, примененный к инициализированному значением uint32_t.

Значение инициализированного интегрального типа 0, поэтому вы берете поразрядный NOT из 0.

Аналогично:

uint32_t x = uint32_t();  // 32 0 in binary form
uint32_t y = ~x;          // 32 1 in binary form

Ответ 2

Прежде всего, как многие уже упоминали, код, который вы видели,

static const uint32_t invalid_index = ~uint32_t();

не является вызовом деструктора, но побитовое "not" ~, применяемое к значению по умолчанию для типа uint32_t(), то есть ~(uint32_t(0)).

Теперь на ваш вопрос

Мой вопрос: каково возвращаемое значение деструктора uint32_t и почему оно полезно?

Возвращаемый тип псевдодеструктора (это не настоящий деструктор, а операция do-nothing с той же нотацией, что и вызов деструктора) void, и это & ​​rsquo; s главным образом полезно для типичного программирования где вы don & rsquo; t знает тип.

Пример:

uint32_t x;
x.~uint32_t();  // Silly but valid, a pseudo-destructor call.

Ответ 3

Это не деструктор, он не двоичный. Здесь недопустимый индекс равен ~ uint32_t (0). Это 32-разрядное целое число без знака со всеми установленными битами. т.е. 0xffffffff.

Ответ 4

Это побитовое НЕ, и его можно использовать для поиска дополнения (например, ~ 1011 = 0100) или в качестве промежуточного шага при попытке найти дополнение 2s (например, [~ 1011] + 0001 = 0101).