代码之家  ›  专栏  ›  技术社区  ›  sje397

要将类与标准容器一起使用,是否需要定义'operator=='?

  •  1
  • sje397  · 技术社区  · 14 年前

    我想澄清C++的标准,特别是它在第20.1.3节中所说的(我的解释):“对于类T和T类的一个实例称为x,t(x)必须等于x”,以便类与标准容器一起工作。

    我找不到“等价”的定义。这是否意味着我必须定义 operator== 作为我们班的一员,所以 T(x) == x 返回真?

    2 回复  |  直到 14 年前
        1
  •  1
  •   GManNickG    14 年前

    等价物是有意模糊的。(避免暗示 operator== 必须 定义;一般情况下不定义。)

    但是,如果两个对象的数据代表同一个对象,则概念上两个对象是等效的。如果某个类的数据在“复制”时可能不同,则需要 运算符== (可能) operator< 随着 rel_ops )确保“等效”的实现。(实际上,可以说,确保可变数据不是类的一部分。)

    通常最好不要走这样的路线,因为你最终不得不修补很多东西以确保它正常工作。如果要复制某些内容,就让它完全复制。这更有意义。

        2
  •  0
  •   Loki Astari    14 年前

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

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

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