3

如果我超载了operator bool(). 我也需要超载operator !()吗?时间和原因。感谢帮助。

4

1 回答 1

6

operator!()如果您希望开发人员能够说出您的类的实例!myobject在哪里,您也应该实现。myobject

第 13.3.1.2 节规定,当将一元运算符应用于用户定义类型的对象时

内置候选函数包括 13.6 中定义的所有候选运算符函数,与给定运算符相比,

  • 具有相同的操作员名称,并且
  • 接受相同数量的操作数,并且
  • 接受可以根据 13.3.3.1 将给定操作数转换为的操作数类型,以及
  • 没有与任何非模板非成员候选相同的参数类型列表。

所以编译器可能会使用内置的bool operator!(bool)和你的用户定义的转换,但只有当你operator bool()是隐式可调用的。 operator bool()几乎总是显式地避免它在任意整数上下文中的使用。正如 chris 在评论中提到的那样,多个用户定义的转换也可能在内置候选运算符之间产生歧义。

所以最好只定义operator!()自己。

于 2012-12-09T01:54:54.427 回答