我是否需要定义`operator ==`以将我的类用于标准容器?

时间:2010-07-19 05:15:03

标签: c++ standards overloading containers

我想澄清C ++标准,特别是它在第20.1.3节中说(我的解释)“对于类T和类T的实例,称为x,T(x)必须等于x”让班级使用标准容器。

我找不到'等效'的定义。这是否意味着我必须将operator==定义为我的类的成员,以便T(x) == x返回true?

2 个答案:

答案 0 :(得分:1)

等效是故意模糊的。 (为了避免暗示operator== 这样的事情必须定义;在一般情况下不会这样做。)

然而,从概念上讲,如果他们的数据代表同一个对象,则两件事情是等价的。如果某个类的数据在“复制”时可能会有所不同,那么您需要制作operator==(可能operator<以及rel_ops)以确保“等效”是就此而言。 (实际上,确保可变数据不是“类的一部分”,可以这么说。)

通常最好不要选择这样的路线,因为最终必须修补很多东西以确保其正常工作。如果要复制某些内容,请将其完全复制。这更有意义。

答案 1 :(得分:0)

这意味着该课程应该是可复制的 并且复制构造函数创建了一个与原始对象相同的对象。

如果没有定义,编译器将生成一个复制构造函数 如果该类不包含任何指针,则在大多数情况下这应该可以正常工作。

注意:您无需定义“operator ==