今天我在一个类中看到了这段代码:
static const uint32_t invalid_index = ~uint32_t();
我的问题是,uint32_t
析构函数的返回值是什么,它为什么有用?
今天我在一个类中看到了这段代码:
static const uint32_t invalid_index = ~uint32_t();
我的问题是,uint32_t
析构函数的返回值是什么,它为什么有用?
这不是析构函数,而是应用于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
首先,正如许多人已经提到的,你看到的代码,
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.
它不是析构函数,也不是二进制的。这里无效索引等于~uint32_t(0)。这是一个设置了所有位的 32 位无符号整数。即,0xffffffff。
它是按位非,它可用于查找补码(例如~1011 = 0100)或作为尝试查找 2s 补码时的中间步骤(例如 [~1011] + 0001 = 0101)。