为什么不能在操作员重载中使用两个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 <<,因此您不允许更改它们的功能。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...