首頁 >後端開發 >C++ >比較 C 中的指標時,等式和關係運算子的可靠性如何?

比較 C 中的指標時,等式和關係運算子的可靠性如何?

DDD
DDD原創
2024-11-19 13:19:03681瀏覽

When Comparing Pointers in C  , How Reliable Are the Equality and Relational Operators?

物件等效指標的比較

比較引用同一變數的指標時,如範例所示:

int *a = something;
int *b = something;

問題是相等運算子「a == b」是否提供了預期的結果

相等運算子(==, !=)

根據C 標準,可以比較相同類型的指標是否相等:

  • 如果它們都為空、指向相同的函數或表示相同的值,則它們比較相等地址。
  • 空指標比較彼此相等,而非空指標與空指標比較總是不相等。

關係運算子(; , =)

僅定義指標的關係運算子用於指向相同類型的對象或函數的指標。結果取決於指標是否指向同一個物件或函數,或其中一個或兩個都為空。

例如,在陣列的情況下,指向不同元素的指標比較彼此大於或小於基於它們在陣列中的位置。但是,將指標與非數組物件或不是同一物件的成員的函數進行比較可能會產生未指定的結果。

虛擬函數的異常

如果指標指向虛擬成員函數,比較結果標準未指定。

中的比較實踐

需要注意的是,使用相等運算符(==、!=)進行指針比較通常是定義良好且可靠的,用於確定指標是否指向同一個物件。但是,應謹慎使用關係運算子(、=),因為它們的行為可能會根據具體上下文而有所不同。

獎勵:與模板

標準庫還提供了指針比較的模板,比如std::less和朋友。這些範本保證任何指標類型的總順序,即使內建運算子不提供明確定義的行為也是如此。

以上是比較 C 中的指標時,等式和關係運算子的可靠性如何?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn