如果我超载operator bool()
。我是否还需要重载operator !()
?何时以及为何。谢谢你的帮助。
答案 0 :(得分:6)
如果您希望开发人员能够说operator!()
其中!myobject
是您班级的一个实例,那么您还应该实施myobject
。
第13.3.1.2节规定了将一元运算符应用于用户定义类型
的对象时内置候选包括所有定义的候选运算符函数 在13.6中,与给定的算子相比,
- 具有相同的运营商名称,
- 接受相同数量的操作数,
- 接受可根据要转换给定操作数或操作数的操作数类型 13.3.3.1和
- 与任何非模板非成员候选人没有相同的参数类型列表。
因此,编译器可能会使用内置的bool operator!(bool)
和您的用户定义转换,但仅限于operator bool()
可隐式调用时。 operator bool()
几乎总是明确地避免在任意整数上下文中使用它。多个用户定义的转换也可能会在注释中提到的chris中创建内置候选运算符之间的歧义。
所以最好自己定义operator!()
。