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

3 c++ operator-overloading

如果我超载了operator bool().我也需要超载operator !()吗?何时以及为何.感谢帮助.

Ben*_*igt 6

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

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

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

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

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

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