如果我超载了operator bool()
. 我也需要超载operator !()
吗?时间和原因。感谢帮助。
user955249
问问题
1239 次
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 回答