簡體   English   中英

數組索引中的感嘆號有什么作用?

[英]What does an exclamation mark in array index do?

在瀏覽我的組織的源代碼庫時,我遇到了這個小寶石:

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

這是有效的代碼嗎? (它編譯)這里的感嘆號是做什么的?

一個倒置~運營商可能是有意義的,因為它與不經常混淆! 布爾表達式中的運算符。 但是,施加不是沒有邏輯意義! 運算符在數組索引上。 有什么想法嗎?

!ParameterWorkingIdx ParameterWorkingIdx0 ,如果是,則!ParameterWorkingIdx計算結果為true ,可以隱式轉換為索引器類型(例如,對於數組中的整數索引器為1 ),否則,計算結果為false

  • 如果ParameterWorkingIdx == 0[!ParameterWorkingIdx] == [1]

  • 如果ParameterWorkingIdx != 0[!ParameterWorkingIdx] == [0]

它還取決於其他東西,如:

  • ParameterWorkingIdx的類型。

  • 超載! operator ! operatorParameterWorkingIdx的類型。

  • RawParameterStorage類型重載的索引器。

  • 等等...

在這里進行一些猜測,但這看起來像一個雙緩沖模式。 ParameterWorkingIdx將在01之間翻轉(可能使用ParameterWorkingIdx = !ParameterWorkingIdx; )。

然后,在任何時候, RawParameterStorage[ParameterWorkingIdx]將是當前緩沖區, RawParameterStorage[!ParameterWorkingIdx]將是前一個緩沖區。

施加不是沒有邏輯意義! 運算符在數組索引上

它可能:它在這里所做的只是將零轉換為1,將任何其他數字轉換為零。

我們可以從這段代碼中推斷出RawParameterStorage可能在頂層有兩個元素。

PS在這里,我假設RawParameterStorage是一個數組(正如你所說)。 此外,我假設ParameterWorkingIdx是一個整數(顧名思義)。 例如,如果要么是具有重載運算符的類,那么語義可能完全不同。

這是有效的代碼嗎?

是的。 假設ParameterWorkingIdx是一個int ,用於!ParameterWorkingIdx ,當與operators !使用時operators ! ,它將在上下文中轉換為bool

零值(對於整數,浮點和未整數枚舉)以及空指針和空指針到成員值將變為false 所有其他值都成為true

然后積分提升用作數組索引。

bool類型可以轉換為int,值false 0, true 1。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM