C ++运算符重载,运算符bool()和运算符!()

时间:2012-12-09 01:52:18

标签: c++ operator-overloading

如果我超载operator bool()。我是否还需要重载operator !()?何时以及为何。谢谢你的帮助。

1 个答案:

答案 0 :(得分:6)

如果您希望开发人员能够说operator!()其中!myobject是您班级的一个实例,那么您还应该实施myobject

第13.3.1.2节规定了将一元运算符应用于用户定义类型

的对象时
  

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

     
      
  • 具有相同的运营商名称,
  •   
  • 接受相同数量的操作数,
  •   
  • 接受可根据要转换给定操作数或操作数的操作数类型   13.3.3.1和
  •   
  • 与任何非模板非成员候选人没有相同的参数类型列表。
  •   

因此,编译器可能会使用内置的bool operator!(bool)和您的用户定义转换,但仅限于operator bool()可隐式调用时。 operator bool()几乎总是明确地避免在任意整数上下文中使用它。多个用户定义的转换也可能会在注释中提到的chris中创建内置候选运算符之间的歧义。

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