c 将类转换为布尔值

新手上路,请多包涵

对于 C++ 的所有基本类型,可以简单地查询:

 if(varname)

并将类型转换为布尔值以进行评估。有没有办法在用户定义的类中复制这个功能?我的一个类由一个整数标识,尽管它有许多其他成员,我希望能够检查整数是否以这种方式设置为 NULL。

谢谢。

原文由 wyatt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 386
2 个回答

您可以定义用户定义的转换运算符。这必须是成员函数,例如:

 class MyClass {
  operator int() const
  { return your_number; }
  // other fields
};

您还可以实现运算符 bool。但是,我 强烈 建议不要将转换运算符定义为整数类型(包括 bool),因为您的类将可用于算术表达式,这会很快导致混乱。

作为替代方案,例如,IOStreams 定义转换为 void* 。您可以测试 void* bool 方式相同,但没有来自 void* 的语言定义的隐式转换。另一种选择是定义 operator! 具有所需的语义。

简而言之:将转换运算符定义为整数类型(包括布尔值)是一个非常糟糕的主意。

原文由 zvrba 发布,翻译遵循 CC BY-SA 4.0 许可协议

C++11 的方法是:

 struct Testable
  {
    explicit operator bool() const
      { return false; }
  };

int main ()
  {
    Testable a, b;
    if (a)      { /* do something  */ }  // this is correct
    if (a == b) { /* do something  */ }  // compiler error
  }

注意 explicit 关键字,它可以防止编译器隐式转换。

原文由 plats1 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题