Jim*_*ell 26 c++ arrays indexing indexer not-operator
在浏览我的组织的源代码库时,我遇到了这个小宝石:
RawParameterStorage[!ParameterWorkingIdx][ParameterDataOffset] = ...
Run Code Online (Sandbox Code Playgroud)
这是有效的代码吗?(它编译)这里的感叹号是做什么的?
反转~
运算符可能有意义,因为它通常与!
布尔表达式中的not 运算符混淆.但是,将not !
运算符强加于数组索引似乎没有逻辑意义.有什么想法吗?
Tam*_*red 42
!ParameterWorkingIdx
手段ParameterWorkingIdx
是0
,如果是,!ParameterWorkingIdx
计算为true
这可能(例如,隐式转换为分度器类型1
中的阵列为整数索引为),否则,它的计算结果作为false
.
如果ParameterWorkingIdx == 0
那么[!ParameterWorkingIdx] == [1]
.
如果ParameterWorkingIdx != 0
那么[!ParameterWorkingIdx] == [0]
.
它还取决于其他东西,如:
的类型ParameterWorkingIdx
.
超载! operator
的类型ParameterWorkingIdx
.
索引器重载的类型RawParameterStorage
.
等等...
Que*_*tin 19
在这里进行一些猜测,但这看起来像一个双缓冲模式.ParameterWorkingIdx
会在(0
和1
可能与ParameterWorkingIdx = !ParameterWorkingIdx;
)之间翻转.
然后,在任何时候,RawParameterStorage[ParameterWorkingIdx]
将是当前缓冲区,RawParameterStorage[!ParameterWorkingIdx]
并将是以前的缓冲区.
将not
!
运算符强加于数组索引似乎没有逻辑意义
它可能:它在这里所做的只是将零转换为1,将任何其他数字转换为零.
我们可以从这个代码推断出RawParameterStorage
顶层可能有两个元素.
PS在这里,我假设这RawParameterStorage
是一个数组(正如你所说).此外,我假设这ParameterWorkingIdx
是一个整数(顾名思义).例如,如果要么是具有重载运算符的类,那么语义可能完全不同.