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是一个整数(顾名思义).例如,如果要么是具有重载运算符的类,那么语义可能完全不同.
| 归档时间: |
|
| 查看次数: |
3977 次 |
| 最近记录: |