【问题标题】:C++ operator overloading, operator bool() and operator !()C++ 运算符重载、运算符 bool() 和运算符 !()
【发布时间】:2012-11-26 20:41:01
【问题描述】:

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

【问题讨论】:

标签: c++ operator-overloading


【解决方案1】:

如果您希望开发人员能够说!myobject,您还应该实现operator!(),其中myobject 是您的类的一个实例。

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

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

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

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

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

【讨论】:

  • thx @leftroundabout,我搞砸了那里的格式,甚至没有注意到
最近更新 更多