簡體   English   中英

我需要定義`operator ==`來將我的類與標准容器一起使用嗎?

[英]Do I need to define `operator==` to use my class with standard containers?

我想澄清C ++標准,特別是在20.1.3節中說(我的解釋)的地方:“對於類T和稱為x的類T的實例,T(x)必須等於x”使用標准容器。

我找不到“等效”的定義。 這是否意味着我必須將operator==定義為類的成員,以便T(x) == x返回true?

等效是故意模糊的。 (為避免像隱含operator==類的事情必須定義,一般情況下不需要。)

但是,從概念上講,如果兩個數據表示相同的對象,則它們是等效的。 如果一個類在“復制”時具有可能不同的數據,那么您確實需要使一個operator== (並且可能要與rel_ops一起使用operator< )以確保對此實現了“等效”。 (實際上,確保可變數據不是“類的一部分”)。

通常最好不要走這樣的路,因為最終必須修補很多東西以確保其正常工作。 如果要復制某些內容,請完全復制。 這更有意義。

這意味着該類應該是可復制構造的。
復制構造函數將創建一個與原始對象等效的對象。

如果未定義,則編譯器將生成一個副本構造函數。
如果該類不包含任何指針,則在大多數情況下應該可以正常工作。

注意:您不需要定義' operator == '

暫無
暫無

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

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