Сегодня я увидел этот код, внутри класса:uint32_t возвращение деструктор значение
static const uint32_t invalid_index = ~uint32_t();
Мой вопрос, что возвращаемое значение из uint32_t
деструктора, и почему это полезно?
Сегодня я увидел этот код, внутри класса:uint32_t возвращение деструктор значение
static const uint32_t invalid_index = ~uint32_t();
Мой вопрос, что возвращаемое значение из uint32_t
деструктора, и почему это полезно?
Это не деструктор, а оператор побитового 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
Это не деструктор, это двоичный нет. Здесь недопустимый индекс равен ~ uint32_t (0). Это 32-разрядное целое число без знака со всеми установленными битами. т. е. 0xffffffff.
Это побитовое НЕ и он может быть использован, чтобы найти дополнения те, которые (например, ~ 1011 = 0100) или в качестве промежуточного шага при попытке найти 2s дополнения (например. [~ 1011] + 0001 = 0101).
Прежде всего, как и многие из них уже упоминалось выше, код вы видели,
static const uint32_t invalid_index = ~uint32_t();
не вызов деструктора, но побитовое «не» ~
, применяется значение по умолчанию типа, uint32_t()
, т.е. ~(uint32_t(0))
.
Теперь к вашему вопросу,
Мой вопрос, что возвращаемое значение из uint32_t деструктора, и почему это полезно?
Тип возвращения псевдо-деструкторы (это ’ с не реальные деструкторами, просто операции ничего не делающей с теми же обозначениями, как деструктор вызов) void
, и это ’ S в основном полезно Общее программирование, где вы набрали ’.
Пример:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
@downvoter: пожалуйста, объясните свое понимание, чтобы другие могли не принимать вас всерьез. –
-1 "Здесь недействительна индекс равен uint32_t (~ 0)" Нет, не в целом. Литерал - это 'int', а' int' гарантированно имеет только 16 бит. –
«Литерал - это int, и int гарантированно имеет только 16 бит». Разве uint32 не может быть 32 бит? – user1507133
@ user1507133, да, но '0' не является' uint32_t', это 'int', и поэтому' ~ 0' –