重载运算符==
Overloading operator==
伙计们,我有一些愚蠢的结构,让我们称之为X,我还有一个fnc(不是它的成员(,它返回一个指向这个结构的指针,所以看起来是这样的:
struct X
{
bool operator==(const X* right)
{
//...
}
};
X* get(X* another)
{
//...
}
我在代码中也有一行"试图"比较指向这些结构的指针,但真正的意图是比较指向的结构:
if (get(a) == get(b))//here obviously I have two pointers returned to be compared
{
//...
}
我还定义了X operator==(const X* right)
的成员,它假设在上述情况下工作,但由于我不理解的原因,它不工作。如何使其工作(我不能更改行if (get(a) == get(b))
,而且get
必须返回指针(。
您不能更改比较指针的方式。必须更改if
语句的语法,或者更改get()
以返回引用而不是指针。任何其他解决方案都将是相当棘手的。
如果您确实必须遵守这些限制,我建议更改get()
以返回某种专门的智能指针来封装您想要的这种不一致的行为,包括过载的operator ->()
和过载的operator ==()
。不过,我发誓,这真的只是在找麻烦,我认为你最好与任何不允许你改变if()
声明的力量作斗争。
这不起作用:您的类型是指针,不能重载内置类型的运算符。因此,首先,您可以通过取消引用进行比较:
T * a, * b;
if (*a == *b) { ... }
接下来,要实现这一点,您必须实现T
的运算符:
struct T {
bool operator==(const T & other) const { ... }
/* ... */
};
请注意,运算符应该是const,并通过const引用获取右侧参数!
请参阅您的最后一句话:如果您都不能更改get(a) == get(b)
和,您也不能更改get
的类型,那么您在比较指针时就陷入了困境。
如果您不能更改行get(a) == get(b)
,也不能更改get()
,那么您想要实现的目标是不可能的。
只有在至少有一个操作数属于用户定义类型(或引用用户定义类型(的情况下,才能定义重载运算符。指向类的指针不满足这一要求,因此您不能定义一个将在比较两个指针时调用的运算符。
bool operator==(const X* right)
将X与X*进行比较。不确定是否有一种方法可以为两个X*声明一个比较器,但我的C++有点生疏,你可能会尝试一下朋友的方法。
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板