2012-08-02 30 views

回答

16

這不是一個析構函數,但按位NOT操作者施加在值初始化uint32_t

值初始化整數類型爲0,所以您正在採取0的位數NOT

到類似:

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

這不是一個析構函數,它是二進制的不是。這裏的無效索引等於〜uint32_t(0)。這是一個32位無符號整數,所有位都置位。即0xffffffff。

+0

-1 「這裏無效索引等於uint32_t的(〜0)」 不,不一般。文字是一個'int','int'只能保證有16位。 – 2012-08-02 21:14:29

+0

「文字是一個int,int只能保證有16位」。不uint32保證是32位? – user1507133 2012-08-02 21:22:38

+0

@ user1507133,是的,但是'0'不是'uint32_t'這是'int',所以''0, – 2012-08-02 21:28:58

1

這是按位NOT並且它可以用於找到的補(例如,〜1011 = 0100)或試圖找到2的補時(中間步驟例如。[〜1011] + 0001 = 0101)。

8

首先,正如許多人已經提到的,你看到的代碼,

static const uint32_t invalid_index = ~uint32_t(); 

不是析構函數調用,但按位「非」 ~,適用於類型,uint32_t()的默認值,即~(uint32_t(0))

現在你的問題,

我的問題是,什麼是uint32_t的析構函數的返回值,爲什麼是它有用嗎?

僞析構函數(它’不是一個真正的析構函數,只是一個相同的符號的析構函數調用什麼都不做的工作)的返回類型是void,並’ S表示主要用通用編程,你不知道’ t知道類型。

實施例:

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

@downvoter:請解釋你的見解,以便其他人可以避免認真對待你。 – 2012-08-02 21:24:16