首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XOR操作符与std::ostream操作符

XOR操作符与std::ostream操作符
EN

Stack Overflow用户
提问于 2016-11-29 11:43:49
回答 1查看 106关注 0票数 1

我写了一个代表Qubit的类。因此,对象只有一个值: state,带有0或1 (bool)。为了进行所需的计算,我重载了运算符,如+,*,^。似乎所有事情都与+和*以及^有关,但前提是我不能将它与std::ostream操作符一起使用。

代码语言:javascript
复制
Qubit x5, x6;
cout << x5^x6; !ERROR!

但是有了

代码语言:javascript
复制
Qubit x5, x6;
Qubit z = x5^x6;
cout << z;

起作用了。我的性病接线员

代码语言:javascript
复制
std::ostream & operator <<(std::ostream & os, const Qubit & qubit)
{
    os << qubit.GetState();
    return os;
}

和我的异或算子

代码语言:javascript
复制
Qubit & Qubit::operator ^(const Qubit & qubit)
{
    Qubit *q = new Qubit;
    ((this->state == 1 && qubit.state == 0) ||
        (this->state == 0 && qubit.state == 1)) ? q->SetState(1) : q->SetState(0);
    return *q;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-29 11:53:28

由于运算符优先级,cout << x5 ^ x6被计算为(cout << x5) ^ x6

由于您没有为ostream&Qubit (或const Qubit&等)提供重载的XOR运算符,所以编译失败。

解决方案是编写cout << (x5 ^ x6);

(请注意,+*运算符的优先级高于<<,这也是它们按照您的描述工作的原因)。

最后,XOR操作符中存在严重的内存泄漏(谁将delete分配的内存?)通过更改函数以返回值副本来修正这个问题:

Qubit Qubit::operator^(const Qubit& qubit) const

并在功能体中使用Qubit q;。命名返回值优化将删除一个值副本。有关详细信息,请参阅arithmetic

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40865102

复制
相关文章

相似问题

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