operator== c++中的顺序
operator== order in C++
与operator==
的顺序有什么不同吗?
我看到一个旧的考试,上面写着:
观察到
*it1 == *it2
与*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==
的结果,所以我很困惑。
是的,可能存在差异,因为给定的operator==
实现可能是不对称的。一般来说,这不是一种很好的编码方式,但它可能发生。对于像int
这样的基本类型,==
是对称的,但是对于用户定义的类,任何事情都可能发生。
实际上,操作符重载可能会产生意想不到的结果。考虑以下内容:
#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;
}
这里实际上调用了两个不同的运算符==
==
运算符测试运算符两边的值是否相等。
哪个值放在操作符的左右两边怎么可能有关系呢?这与它们是否相等无关。
当然,您可以重载操作符以获得一些非标准行为,在这种情况下,这可能很重要。但这将是一种糟糕的方法,并且无法明确哪些值应该放在操作符的左侧,哪些值应该放在操作符的右侧。相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- QML按钮点击功能执行顺序
- C++中数据类型修饰符的顺序
- 当比特(而不是字节)的顺序至关重要时的持久性
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 通过选项卡的文本设置QTabWidget顺序
- c++11评估顺序(未定义的行为)
- 如何在C++中递归地按相反顺序打印集合
- 给定顺序中的事件处理
- 具有包含其他对象的类的对象创建顺序
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 遍历顺序由 std::文件系统directory_iterator给出
- 检查 2 棵树是否具有相同的顺序