2012-08-02 21 views

Odpowiedz

16

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 
3

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.

+0

-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. –

+0

"Dosłowny to int, a int ma tylko 16 bitów". Czy nie ma 32 zabezpieczonego 32 bitów? – user1507133

+0

@ user1507133, tak, ale '0' nie jest' uint32_t' to 'int', a więc jest' ~ 0' –

1

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).

8

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. 
+7

@downvoter: proszę wyjaśnić swój wgląd, aby inni mogli uniknąć poważnego potraktowania cię. –

Powiązane problemy