今天我在课堂上看到了这段代码:
static const uint32_t invalid_index = ~uint32_t();
我的问题是,uint32_t
析构函数的返回值是什么,为什么它有用?
答案 0 :(得分:16)
这不是析构函数,而是按位NOT
运算符应用于值初始化 uint32_t
。
值初始化整数类型为0
,因此您将NOT
的{{1}}按位{。}}。
类似于:
0
答案 1 :(得分:8)
首先,正如许多人已经提到过的,你看到的代码,
static const uint32_t invalid_index = ~uint32_t();
不是析构函数调用,而是按位“not”~
,应用于类型uint32_t()
的默认值,即~(uint32_t(0))
。
现在问你的问题,
我的问题是,uint32_t析构函数的返回值是什么,为什么它有用?
伪析构函数的返回类型(它不是一个真正的析构函数,只是一个与析构函数调用具有相同符号的无操作操作)是void
,它主要是对于你不知道类型的通用编程很有用。
示例:
uint32_t x;
x.~uint32_t(); // Silly but valid, a pseudo-destructor call.
答案 2 :(得分:3)
它不是析构函数,它不是二元函数。这里无效索引等于~intint32_t(0)。这是一个32位无符号整数,所有位都设置好。即,0xffffffff。
答案 3 :(得分:1)
它是按位 NOT ,它可用于查找补码(例如~1011 = 0100)或作为尝试找到2s补码的中间步骤(例如[〜] 1011] + 0001 = 0101)。