![](/img/trans.png)
[英]What does the Exclamation mark in block comment means in C++ /*! <comment>+/
[英]What does an exclamation mark in array index do?
在瀏覽我的組織的源代碼庫時,我遇到了這個小寶石:
RawParameterStorage[!ParameterWorkingIdx][ParameterDataOffset] = ...
這是有效的代碼嗎? (它編譯)這里的感嘆號是做什么的?
一個倒置~
運營商可能是有意義的,因為它與不經常混淆!
布爾表達式中的運算符。 但是,施加不是沒有邏輯意義!
運算符在數組索引上。 有什么想法嗎?
!ParameterWorkingIdx
ParameterWorkingIdx
為0
,如果是,則!ParameterWorkingIdx
計算結果為true
,可以隱式轉換為索引器類型(例如,對於數組中的整數索引器為1
),否則,計算結果為false
。
如果ParameterWorkingIdx == 0
則[!ParameterWorkingIdx] == [1]
。
如果ParameterWorkingIdx != 0
則[!ParameterWorkingIdx] == [0]
。
它還取決於其他東西,如:
ParameterWorkingIdx
的類型。
超載! operator
! operator
由ParameterWorkingIdx
的類型。
由RawParameterStorage
類型重載的索引器。
等等...
在這里進行一些猜測,但這看起來像一個雙緩沖模式。 ParameterWorkingIdx
將在0
和1
之間翻轉(可能使用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.