我是否需要定义`operator==`才能将我的类与标准容器一起使用? 我想澄清C++标准,特别是在第20.1.3节中(我的解释)中,“对于类T和T类的实例称为x,t(x)必须等于x”,以便类使用标准容器。< /P>

我是否需要定义`operator==`才能将我的类与标准容器一起使用? 我想澄清C++标准,特别是在第20.1.3节中(我的解释)中,“对于类T和T类的实例称为x,t(x)必须等于x”,以便类使用标准容器。< /P>,c++,standards,overloading,containers,C++,Standards,Overloading,Containers,我找不到“等价物”的定义。这是否意味着我必须将操作符==定义为类的成员,以便T(x)==x返回true?这意味着类应该是可复制构造的。 复制构造函数创建一个与原始构造函数等价的对象 如果不定义一个,编译器将生成一个副本构造函数。 如果类不包含任何指针,那么在大多数情况下都可以正常工作 注意:您不需要定义“运算符==”这意味着类应该是可复制构造的。 复制构造函数创建一个与原始构造函数等价的对象 如果不定义一个,编译器将生成一个副本构造函数。 如果类不包含任何指针,那么在大多数情况下都可以正常工作

我找不到“等价物”的定义。这是否意味着我必须将
操作符==
定义为类的成员,以便
T(x)==x
返回true?

这意味着类应该是可复制构造的。
复制构造函数创建一个与原始构造函数等价的对象

如果不定义一个,编译器将生成一个副本构造函数。
如果类不包含任何指针,那么在大多数情况下都可以正常工作


注意:您不需要定义“
运算符==

这意味着类应该是可复制构造的。
复制构造函数创建一个与原始构造函数等价的对象

如果不定义一个,编译器将生成一个副本构造函数。
如果类不包含任何指针,那么在大多数情况下都可以正常工作


注意:您不需要定义“
运算符==

等效值故意含糊。(为了避免像暗示
操作符==
这样的事情,必须定义它;在一般情况下不会这样做。)


但是,从概念上讲,如果两个对象的数据表示同一个对象,则这两个对象是等价的。如果一个类在“复制”时有可能不同的数据,那么您确实需要创建一个
操作符==
(并且可能
操作符的等价物是故意模糊的。(为了避免类似于
操作符==
的含义,必须定义它;在一般情况下不会这样做。)



然而,从概念上讲,如果它们的数据表示相同的对象,那么两件事是等价的。如果一个类在“复制”时有可能不同的数据,那么您确实需要创建一个
操作符==
(并且可能
操作符我希望有一个到标准文档的正确链接,以便我可以正确引用它,如果任何人手头有这样的链接:)不幸的是,它不是免费的:我希望有一个到标准文档的适当链接,这样我就可以正确地引用它,如果有人手边有:)不幸的是,它不是免费的:但“等效”到底意味着什么呢?标准容器复制对象。(它们将对象复制到容器中)。只要你对复制的内容没问题,它就是等价的。例如,复制到容器中的共享_指针可能与原始指针不完全相同(某些内部状态可能会更改),但它与原始指针等效。这不取决于容器吗?如果无法分辨两个对象是否相同,哈希表或二叉树将如何工作?@Gabe:有些容器需要定义运算符<(Sutch as Map(即二叉树))。但这不是问题所在。你能不使用“等效”一词来定义“等效”吗但是“等价物”到底是什么意思呢?标准容器复制对象。(它们将对象复制到容器中)。只要你对复制的内容没问题,它就是等价的。例如,复制到容器中的共享_指针可能与原始指针不完全相同(某些内部状态可能会更改),但它与原始指针等效。这不取决于容器吗?如果无法分辨两个对象是否相同,哈希表或二叉树将如何工作?@Gabe:有些容器需要定义运算符<(Sutch as Map(即二叉树))。但这不是问题所在。你能不使用“等效”一词来定义“等效”吗我认为您的定义是“正确的”(因此接受)…但是,标准(允许可怕的不可读代码和嵌套模板,这会让您大吃一惊)对我的设计施加概念约束,这似乎非常奇怪。例如,如果在我的设计中定义了运算符,但我还没有键入它,并且它没有被使用,因此无论如何都会被优化掉,这将是“兼容的”?@sje:Heh,我想我明白你的意思了。:)在那种情况下,我会说是的。但是对于一个通用的解决方案(因此是一个很好的建议:P),它应该被实现。另外,标准容器是根据概念定义的,它们的
value\u type
必须是一组特定概念的一部分。因此,是的,它在字面意义上对你的类进行了概念上的限制。我认为你的定义是“正确的”(因此接受)…但是,这个标准(它允许可怕的不可读代码和嵌套模板,这会让你大吃一惊)对我的设计进行了概念上的限制,这似乎非常奇怪。例如,如果在我的设计中定义了运算符,但我还没有键入它,并且它没有被使用,因此无论如何都会被优化掉,这将是“兼容的”?@sje:Heh,我想我明白你的意思了。:)在那种情况下,我会说是的。但是对于一个通用的解决方案(因此是一个很好的建议:P),它应该被实现。另外,标准容器是根据概念定义的,它们的
value\u type
必须是一组特定概念的一部分。所以是的,它在字面意义上对你的类进行了概念上的限制。