微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不能在操作员重载中使用两个ptrs?

如何解决为什么不能在操作员重载中使用两个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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?