有没有“正常”的情况? C++ 中的一元逻辑运算符

发布于 2024-12-28 09:21:03 字数 310 浏览 2 评论 0原文

我的意思是,我们都知道有否定逻辑运算符 !,它可以这样使用:

class Foo
{
public:
    bool operator!() { /* implementation */ }
};

int main()
{
    Foo f;
    if (!f)
        // Do Something
}

是否有任何运算符允许这样做:

if (f)
    // Do Something

我知道这可能不重要,但只是想知道!

I mean, we all know that there is the negation logical operator !, and it can be used like this:

class Foo
{
public:
    bool operator!() { /* implementation */ }
};

int main()
{
    Foo f;
    if (!f)
        // Do Something
}

Is there any operator that allows this:

if (f)
    // Do Something

I know it might not be important, but just wondering!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

故事↓在人 2025-01-04 09:21:03

如果您是小心

或者写:

if (!!f)
   // Do something

You can declare and define operator bool() for implicit conversion to bool, if you're careful.

Or write:

if (!!f)
   // Do something
み青杉依旧 2025-01-04 09:21:03

由于 operator bool() 本身非常危险,因此我们通常使用名为 safe-bool 习语

class X{
  typedef void (X::*safe_bool)() const;
  void safe_bool_true() const{}
  bool internal_test() const;
public:
  operator safe_bool() const{
    if(internal_test())
      return &X::safe_bool_true;
    return 0;
  }
};

在 C++11 中,我们得到显式转换运算符;因此,上述习惯用法已过时

class X{
  bool internal_test() const;
public:
  explicit operator bool() const{
    return internal_test();
  }
};

Since operator bool() in itself is pretty dangerous, we usually employ something called the safe-bool idiom:

class X{
  typedef void (X::*safe_bool)() const;
  void safe_bool_true() const{}
  bool internal_test() const;
public:
  operator safe_bool() const{
    if(internal_test())
      return &X::safe_bool_true;
    return 0;
  }
};

In C++11, we get explicit conversion operators; as such, the above idiom is obsolete:

class X{
  bool internal_test() const;
public:
  explicit operator bool() const{
    return internal_test();
  }
};
意中人 2025-01-04 09:21:03
operator bool() { //implementation };
operator bool() { //implementation };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文