[C++] 数组索引中的感叹号是做什么的?


Answers

这里有一点猜测,但看起来像一个双缓冲模式。 ParameterWorkingIdx将在01之间触发(可能使用ParameterWorkingIdx = !ParameterWorkingIdx; )。

然后,在任何时候, RawParameterStorage[ParameterWorkingIdx]将是当前的缓冲区,并且RawParameterStorage[!ParameterWorkingIdx]将是前一个缓冲区。

Question

在仔细阅读我的组织的源代码库的同时,我遇到了这个小宝贝:

RawParameterStorage[!ParameterWorkingIdx][ParameterDataOffset] = ...

这个有效的代码? (编译)这里有什么感叹号呢?

反转操作符可能是有意义的,因为它通常与非! 运算符在布尔表达式中。 然而,强加不是合乎逻辑的意思! 运算符在数组索引上。 有什么想法吗?




这个有效的代码?

是的。 假设ParameterWorkingIdx是一个int ,对于!ParameterWorkingIdx ,与operators ! ,这将是上下文转换为布尔

值为零(对于整型,浮点型和非范型枚举)以及空指针和空指针至成员值都变为false 。 所有其他的值成为true

然后积分提升为数组索引。

类型布尔可以被转换为int值,其值为0, true 1。

所以!ParameterWorkingIdxParameterWorkingIdx == 0 ? 1 : 0是等价的ParameterWorkingIdx == 0 ? 1 : 0 ParameterWorkingIdx == 0 ? 1 : 0 ,这更清晰的IMO。