Dziś widziałem tego kodu, wewnątrz klasy:uint32_t wartość zwracana destructor
static const uint32_t invalid_index = ~uint32_t();
Moje pytanie brzmi, co jest wartością zwracaną z uint32_t
destructor, i dlaczego jest przydatna?
Dziś widziałem tego kodu, wewnątrz klasy:uint32_t wartość zwracana destructor
static const uint32_t invalid_index = ~uint32_t();
Moje pytanie brzmi, co jest wartością zwracaną z uint32_t
destructor, i dlaczego jest przydatna?
To nie jest destruktor, ale operator bitowe NOT
nałożono na wartość zainicjowanyuint32_t
.
Inicjowany całkowy typ wartości to 0
, więc bierzesz bitowe NOT
z 0
.
podobne do:
uint32_t x = uint32_t(); // 32 0's in binary form
uint32_t y = ~x; // 32 1's in binary form
Nie jest destruktor, to binarny nie. Tutaj nieprawidłowy indeks jest równy ~ uint32_t (0). Która jest 32-bitową liczbą całkowitą bez znaku, z wszystkimi ustawionymi bitami. tj. 0xffffffff.
To bitowe NIE i może być użyte do znalezienia uzupełnienie Te (np. ~ 1011 = 0100) lub jako etap pośredni, próbując znaleźć 2S dopełniacza (np. [~ 1011] + 0001 = 0101).
Przede wszystkim, jak wiele już wspomniano, kod obejrzałeś,
static const uint32_t invalid_index = ~uint32_t();
nie jest wywołanie destruktora ale bitowe „nie” ~
, stosowane do domyślnej wartości typu, uint32_t()
, tj. ~(uint32_t(0))
.
Teraz na pytanie,
Moje pytanie brzmi, jaka jest wartość powrót destruktora uint32_t i dlaczego to jest przydatne?
typu powrót do pseudo destructor (IT ’ nie jest prawdziwym destructor, tylko operacji nie robić nic z tego samego zapisu jako wywołanie destructor) jest void
, a ’ s głównie przydatny ogólne programowanie, w którym użytkownik zna dany typ.
przykład:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
@downvoter: proszę wyjaśnić swój wgląd, aby inni mogli uniknąć poważnego potraktowania cię. –
-1 "tu wskaźnik nieważności wynosi uint32_t (~ 0)" Nie, w ogóle. Dosłowny to "int", a "int" ma tylko 16 bitów. –
"Dosłowny to int, a int ma tylko 16 bitów". Czy nie ma 32 zabezpieczonego 32 bitów? – user1507133
@ user1507133, tak, ale '0' nie jest' uint32_t' to 'int', a więc jest' ~ 0' –