代码之家  ›  专栏  ›  技术社区  ›  default

定义运算符void*和运算符bool

  •  5
  • default  · 技术社区  · 14 年前

    我试着用一个 operator bool 还有一个 operator void* ,但是编译器说它们是矛盾的。有什么方法可以向编译器解释使用什么运算符,或者不能同时使用它们吗?

    class A {
    public:
        operator void*(){
            cout << "operator void* is called" << endl;
            return 0;
        }
    
        operator bool(){
            cout << "operator bool is called" << endl;
            return true;
        }
    };
    
    int main()
    {
        A a1, a2;
        if (a1 == a2){
            cout << "hello";
        }
    } 
    
    2 回复  |  直到 14 年前
        1
  •  4
  •   Lou Franco    14 年前

    你可以直接给接线员打电话。

    int main()
    {
        A a1, a2;
        if (static_cast<bool>(a1) == static_cast<bool>(a2)){
            cout << "hello";
        }
    } 
    

    不过,在这种情况下,您应该定义 operator==() 不依赖于转换。

        2
  •  8
  •   Michael Melanson    14 年前

    这里的问题是你定义 operator bool 但从声音上看你想要的是 operator == . 或者,可以显式强制转换为 void * 这样地:

    if ((void *)a1 == (void *)a2) {
        // ...
    }
    

    ... 但那真的很奇怪。别那么做。相反,定义 操作员== 像这样在里面 class A :

    bool operator==(const A& other) const {
        return /* whatever */;
    }