比較指標以確定物件身分
給定兩個指標 a 和 b,判斷它們是否引用同一個物件是常見的程式需求。直觀的方法是使用相等運算子 (==)。本文探討了這種方法的有效性,並提供了更多來自 C 標準的見解。
相等運算子和指標比較
根據C 11 標準,可以比較相同類型的指標相等,有特定規則:
- 如果兩個指標都指向同一個物件或函數,或都有空值,則它們相等(a == b)。
- 如果任一指標指向虛擬成員函數,則結果未指定。
- 如果指標引用不是同一物件的成員的不同物件或陣列元素,則相等比較未指定。
這表示如果a 和b 指向同一個物件或具有null,則a == b 成立
關係運算子和指標
關係運算符(、=)有一組獨特的指標比較規則:
- 如果p 和q 指向同一個物件或超過同一個陣列的末尾,或兩者都為null,則比較p = q 產生true,而p
- 如果p 和q 指向不同的對象,且不是同一對像或陣列元素的成員,或只有一個為null,則p = q 未指定。
對程式碼的影響
對於您的特定情況,如果 a 和 b 都分配了某些內容, a == b 將指示它們是否指向同一個物件。但是,需要注意的是,如果某些內容引用了不相關的不同物件(例如,不同函數中的變數或不同作用域中的陣列),則此比較可能會產生未指定的結果。
標準函式庫的其他見解
C 標準函式庫提供了用於比較指標的附加工具:
-
專業化: 標準庫專業化
和>指標類型提供全序,即使內建運算子不提供全序。這表示您可以將任何 void* 指標與 std::less 進行比較。和朋友們,確保良好定義的排序。
結論
使用相等運算符== 比較指標可能是確定物件身分的有用技術,但至關重要的是請注意C 標準中指定的潛在警告和限制。如果比較結果處於未指定的條件,則可能需要替代方法,例如手動追蹤物件關係或使用自訂比較函數。
以上是在 C 中使用「==」比較指標來確定物件身分有多可靠?的詳細內容。更多資訊請關注PHP中文網其他相關文章!