将const引用转换为指向const的const指针

时间:2012-07-06 20:03:20

标签: c++ stl const

我正在建立一个STL列表。我创建了一个装饰类(MyList),它是一个特殊类(ProtectMe)的列表。我希望列表中的所有项都是const。所以这就是我所做的:

#include <list>

using namespace std;

class ProtectMe{
private:
    int data_;
public:
    ProtectMe(int data):data_(data){
    }

    int data() const{return data_;}
};

class MyList{
private:
    //A list of constant pointers to constant ProtectMes.
    list<const ProtectMe* const> guts_;
public:
    void add(const ProtectMe& data){
        guts_.push_front(&data);
    }
};

我收到以下编译错误:

error: ‘const _Tp* __gnu_cxx::new_allocator::address(const _Tp&) const [with _Tp = const ProtectMe* const]’ cannot be overloaded

我还在试图解码我出错的地方。为什么这段代码不能编译?我应该改变什么?

1 个答案:

答案 0 :(得分:2)

value_type标准容器必须为CopyInsertable(或MoveInsertable)才能使push_front正常工作。 list<const ProtectMe* const>的值类型是常量,因此它不是CopyInsertable

CopyInsertable表示

allocator_traits<A>::construct(m, p, v);

定义良好,其中p是指向value_type的指针,默认情况下在p上调用placement new,因此需要它为非const指针。