11

今天我在一个类中看到了这段代码:

static const uint32_t invalid_index = ~uint32_t();

我的问题是,uint32_t析构函数的返回值是什么,它为什么有用?

4

4 回答 4

16

这不是析构函数,而是应用于value-initialized的按位运算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
于 2012-08-02T21:03:05.350 回答
8

首先,正如许多人已经提到的,你看到的代码,

static const uint32_t invalid_index = ~uint32_t();

不是析构函数调用,而是按位“非” ~,应用于类型的默认值uint32_t(),即~(uint32_t(0)).

现在回答你的问题,

我的问题是,uint32_t 析构函数的返回值是多少,它为什么有用?

伪析构函数的返回类型(它不是真正的析构函数,只是一个与析构函数调用具有相同符号的无操作操作)void,它主要用于不知道类型的泛型编程。

例子:

uint32_t x;
x.~uint32_t();  // Silly but valid, a pseudo-destructor call.
于 2012-08-02T21:20:21.470 回答
3

它不是析构函数,也不是二进制的。这里无效索引等于~uint32_t(0)。这是一个设置了所有位的 32 位无符号整数。即,0xffffffff。

于 2012-08-02T21:03:15.980 回答
1

它是按位,它可用于查找补码(例如~1011 = 0100)或作为尝试查找 2s 补码时的中间步骤(例如 [~1011] + 0001 = 0101)。

于 2012-08-02T21:08:28.267 回答