gpt4 book ai didi

c++ - 将 const 引用转换为指向 const 的 const 指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:50 33 4
gpt4 key购买 nike

我正在构建一个 STL 列表。我制作了一个装饰器类 (MyList),它是一个特殊类 (ProtectMe) 的列表。我希望列表中的所有项目都是常量。所以这就是我所做的:

#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

我还在摸不着头脑,试图解码我哪里出错了。为什么这段代码不能编译?我应该改变什么?

最佳答案

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,因此要求它是一个非常量指针。

关于c++ - 将 const 引用转换为指向 const 的 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368940/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com