如何解决为什么不能在操作员重载中使用两个ptrs?
| 这很烦人,我可以使用这些参数/返回值编写函数,但是为什么我不能定义一个运算符来执行此操作? -edit-我实际上是试图使ѭ0重载,以下内容仅供参考。 来自msdn// C2803.cpp
// compile with: /c
class A{};
bool operator< (const A *left,const A *right); // C2803
// try the following line instead
// bool operator< (const A& left,const A& right);
gcc错误
error: ‘bool operator<(const A*,const A*)’ must have an argument of class or enumerated type
解决方法
因为每个用户定义的运算符重载都需要至少一个用户定义的类型作为参数。点不是用户定义的类型。
C ++ 03标准,
§13.5 [over.oper] p6
:
运算符应为非静态成员函数或为非成员函数,并具有至少一个参数,其类型为类,对类的引用,枚举或对枚举的引用。
, 因为你不允许作弊。
如果您可以覆盖指针类型的比较运算符,那么您将不再能够按值(也就是:按实际的数字指针值)比较那些指针。这很重要,有时也有用。
我真正的代码实际上是<<。我为什么不能用它呢?
出于同样的原因:指针是C ++基本类型。它们不是用户定义的类型。您是否希望不再将指针值左移?好的,显然您可以,但是C ++不会允许您。
仅当C ++不具备这些类型的运算符的现有功能时(只有少数例外),才可以覆盖运算符。 C ++已经为指针提供了operator <和operator <<,因此您不允许更改它们的功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。