首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义操作符void*和操作符bool

定义操作符void*和操作符bool
EN

Stack Overflow用户
提问于 2010-11-28 09:33:33
回答 2查看 1.9K关注 0票数 5

我试着用一个operator bool和一个operator void*创建一个类,但是编译器说它们是不明确的。有没有什么方法可以向编译器解释使用什么运算符,或者我不能同时使用它们?

代码语言:javascript
复制
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";
    }
} 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-28 09:39:36

您可以直接调用操作员。

代码语言:javascript
复制
int main()
{
    A a1, a2;
    if (static_cast<bool>(a1) == static_cast<bool>(a2)){
        cout << "hello";
    }
} 

但是,在这种情况下,看起来您应该定义operator==(),而不是依赖于转换。

票数 4
EN

Stack Overflow用户

发布于 2010-11-28 09:41:43

这里的问题是,您正在定义operator bool,但是从它的发音来看,您想要的是operator ==。或者,您可以显式转换为void *,如下所示:

代码语言:javascript
复制
if ((void *)a1 == (void *)a2) {
    // ...
}

..。但这真的很奇怪。别干那事。相反,在class A中像这样定义您的operator ==

代码语言:javascript
复制
bool operator==(const A& other) const {
    return /* whatever */;
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4294873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档