【问题标题】:C++: Remove == or any other operator for specific typesC++:删除 == 或特定类型的任何其他运算符
【发布时间】:2026-01-18 03:25:01
【问题描述】:

如果我有一个名为 classA 的类具有 classB 和 classC 的类型转换重载,我如何禁用 == 运算符以将 classA 键入为 classC?

class classA{
   operator classB();
   operator classC();

   //Remove this comparison possibility:
   operator ==(classC firstObject,classC secondObject);
}

从这个问题继续:

Ambiguous overload when using many typecasts operator overloads

【问题讨论】:

  • 明确 operatorB 和 operatorC?这不是一个完整的例子。你能发布一个最小的、完整的例子吗?
  • 您的代码将无法工作,这不仅仅是因为缺少;。你在那里有一种三元运算符。 operator== 如果是成员则需要一个参数,如果是非成员则需要 2 个参数。 ...正如上面的评论所说,让我们得到一个minimal reproducible example,这样我们就可以看到你到目前为止所做的尝试,以及什么不起作用。

标签: c++ class operator-overloading operators equals-operator


【解决方案1】:

在 C++11 中,您可以使用delete 方法。
这类似于将方法设为私有。
但是,它表达了程序员的意图并导致更具描述性的编译器错误。

class classA{
   operator classB();
   operator classC();

   //Remove this comparison possibility:
   classC operator ==(classC secondObject) = delete;
};

【讨论】:

    【解决方案2】:

    定义运算符并将其设为private。然后,其他人将无法调用它。

    【讨论】: