加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

operator == C中的订单

发布时间:2020-12-16 09:59:47 所属栏目:百科 来源:网络整理
导读:在操作符订购时是否有任何不同?=? 我遇到了一个旧的考试,其中说: observe that *it1 == *it2 is not the same as *it2 == *it1 在这种情况下,it1是某种类型IT1的迭代器,而it2是某种类型IT2的迭代器. IT1 it1和IT2 it2作为函数的参数,其中IT1可以与IT2相同
在操作符订购时是否有任何不同?=?

我遇到了一个旧的考试,其中说:

observe that *it1 == *it2 is not the same as *it2 == *it1

在这种情况下,it1是某种类型IT1的迭代器,而it2是某种类型IT2的迭代器. IT1 it1和IT2 it2作为函数的参数,其中IT1可以与IT2相同.示例代码:

template <typename IT1,typename IT2>
bool f(IT1 it1,IT2 it2) {
    return *it1 == *it2;
}

有什么想法吗?在我看来,顺序不应该影响operator ==的结果,所以我很困惑.

解决方法

实际上,运算符重载可能会产生意外结果.考虑以下:

#include <iostream>

class Bar;

class Foo {
public:
    Foo() {}
    int operator==(const Bar& bar) { std::cout << "foo == barn"; return 0; }
};

class Bar {
public:
    Bar() {}
    int operator==(const Foo& foo) { std::cout << "bar == foon"; return 0; }
};

int main()
{
    Foo foo;
    Bar bar;

    foo == bar; // prints "foo == bar"
    bar == foo; // prints "bar == foo"

    return 0;
}

这里实际上有两个不同的运算符==被调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读