我想澄清C ++标准,特别是它在第20.1.3节中说(我的解释)“对于类T和类T的实例,称为x,T(x)必须等于x”让班级使用标准容器。
我找不到'等效'的定义。这是否意味着我必须将operator==
定义为我的类的成员,以便T(x) == x
返回true?
答案 0 :(得分:1)
等效是故意模糊的。 (为了避免暗示operator==
这样的事情必须定义;在一般情况下不会这样做。)
然而,从概念上讲,如果他们的数据代表同一个对象,则两件事情是等价的。如果某个类的数据在“复制”时可能会有所不同,那么您需要制作operator==
(可能operator<
以及rel_ops
)以确保“等效”是就此而言。 (实际上,确保可变数据不是“类的一部分”,可以这么说。)
通常最好不要选择这样的路线,因为最终必须修补很多东西以确保其正常工作。如果要复制某些内容,请将其完全复制。这更有意义。
答案 1 :(得分:0)
这意味着该课程应该是可复制的 并且复制构造函数创建了一个与原始对象相同的对象。
如果没有定义,编译器将生成一个复制构造函数 如果该类不包含任何指针,则在大多数情况下这应该可以正常工作。
注意:您无需定义“operator ==
”