[c++] 数组索引中的感叹号有什么作用?


1 Answers

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

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

Question

在浏览我的组织的源代码库时,我遇到了这个小宝石:

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

这是有效的代码吗? (它编译)这里的感叹号是做什么的?

一个反转运算符可能有意义,因为它通常与不相关! 布尔表达式中的运算符。 但是,施加不是没有逻辑意义! 运算符在数组索引上。 有什么想法吗?




这是有效的代码吗?

是的。 假设ParameterWorkingIdx是一个int ,用于!ParameterWorkingIdx ,当与operators !使用时operators ! ,它将在上下文中转换为bool

零值(对于整数,浮点和未整数枚举)以及空指针和空指针到成员值将变为false 。 所有其他值都成为true

然后积分提升用作数组索引。

bool类型可以转换为int,值false 0, true 1。

那么!ParameterWorkingIdx等同于ParameterWorkingIdx == 0 ? 1 : 0 ParameterWorkingIdx == 0 ? 1 : 0 ,IMO要清楚得多。




Related