2 skysilence Skysilence 于 2013.05.29 22:15 提问

C++中操作符重载的const与默认构造函数

原代码

class TestOverloadLessThan
{
public:
    TestOverloadLessThan( int m ) : m_int(m){};
    int getInt(){ return m_int;};

    bool operator<( const TestOverloadLessThan& t) const
    { 
        return ( this->getInt() < t.getInt() );
    };
private:
    int m_int;
};

//bool operator<( const TestOverloadLessThan& t1,const TestOverloadLessThan& t2)
//{
//  return ( t1.getInt() < t2.getInt() );
//}

int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;

    list<TestOverloadLessThan> l;

    for ( int n=0 ; n<10 ; ++n )
    {
        TestOverloadLessThan t(n);
        l.push_front(t);
    }

    l.sort();

    for ( list<TestOverloadLessThan>::const_iterator it=l.begin() ; it!=l.end() ; ++it )
    {
        cout<<(*it).getInt()<<endl;
    }

    system("pause");
    return 0;
}

无论成员函数与非成员函数都是这个错误。两个const和const_iterator:
error C2662: 'TestOverloadLessThan::getInt' : cannot convert 'this' pointer from 'const TestOverloadLessThan' to 'TestOverloadLessThan &'
把所有的const去掉之后就可以通过,加上默认构造函数加上const可以通过

class TestOverloadLessThan
{
public:
    TestOverloadLessThan(){};
    TestOverloadLessThan( int m ) : m_int(m){};
    int getInt(){ return m_int;};

    bool operator<( const TestOverloadLessThan& t) const
    { 
        return ( this->getInt() < t.getInt() );
    };
private:
    int m_int;
};

测试代码与原来一样。
请问这里是在哪里影响了this指针转换const——>普通引用的

1个回答

lyyybz
lyyybz   Rxr 2016.08.19 10:49

请问你的问题解决了么,我碰到和你一样的问题!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++重载运算符需要是const的情况
#include class twelfth_class_1{ int i; public: twelfth_class_1(int ii=0 ){ i = ii; } const twelfth_class_1 operator+(const twelfth_class_1 &tc1)const { twelfth_class_1 x(this->i+tc1.i); retu
c++ 运算符重载和转换
总结和演示了常见运算符重载的方法和注意事项,可供需要时查阅。
运算符重载函数之const
Const运算符重载函数 每个类都需要重载自己的运算符,这样该类的对象才能使用相应的运算符。对于运算符重载函数来说,参数个数就是该运算符接受的运算对象的个数,这个大家都是知道的。 对于const修饰运算符重载函数这是至关重要的, object operator + (const object &amp;amp;) const ; 修饰函数的这个const其实修饰的是this指针。this指针从,obj...
为什么操作符 + - * / 返回值应该为const
为什么操作符 + - * / 返回值应该为const,以及注意点
Class &operator=(const Class &)
Class &operator=(const Class &); 操作符重载什么意思??? 推荐于2016-04-02 13:53:15 最佳答案 这是赋值运算符重载的标准格式,形参为本类对象的常引用,返回值是本类对象自己的引用可以做左值,只能用类的成员重载重载赋值运算符用于类中有动态分配成员时,本类对象相互赋值用,为避免C++默认按位赋值方式带来
拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载
在我们学习C++的过程中,我们难免会遇到类,在类中有6个默认的函数,它们分别为:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载。
void operator=(const CClass&) 和 CClass& operator=(const CClass&)两种赋值运算符重载的区别
之前也没有很在意,但今天看到了 void operator=(const CClass&) 格式的赋值运算符重载,和平时遇到的有点不一样,但是可以工作的。究竟哪种是正确的呢? 其实两种都是正确的,唯一的区别就是CClass& operator=(const CClass&) 可以连续赋值,如 a=b=c; 而void operator=(const CClass&)做不到连续赋值,只能 a=
operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。  这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解: 一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,一般情况下,只支持基本数据类型
C++ 重载操作符 operator
参数个数的限定     非成员函数:   单目运算符:参数表中只有一个参数;   双目运算符:参数表中只有两个参数       成员函数:   单目运算符:参数表中没有参数;   双目运算符:参数表中只有一个参数 operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。    这是C++扩展运算
关于”类‘customer’中不存在默认构造函数“的问题
关于”类‘customer’中不存在默认构造函数“的问题,我是之前在类中声明定义了一个带参数的构造函数,如下: 但是报错如下:   解决方法:         添加一个不带参数的构造函数即可。