gpt4 book ai didi

c++ - 指向const数据和C++列表的const指针

转载 作者:行者123 更新时间:2023-12-01 14:41:50 25 4
gpt4 key购买 nike

我想在列表中插入一些元素。
我真正想做的是使用“insert3”,因为它可以保证指针不会更改,并且数据也不会更改。
但是“insert2”和“insert3”给出了以下错误,而“insert1”却没有:

class A
{
public:
std::list<int*> l;
void insert(int* const a)
{
l.push_back(a); //works
}

void insert2(const int* a)
{
l.push_back(a);
/*
no instance of overloaded function "std::list<_Ty, _Ax>::push_back [with _Ty=int *, _Ax=std::allocator<int *>]"
matches the argument list
*/
}

void insert3(const int* const a)
{
l.push_back(a);
}

};

谢谢你的帮助!

最佳答案

简短答案
您应该改用list<int const* const>作为l的类型,然后可以使用任何插入内容,包括insert3
长答案
通过插入list<int*>,您尝试将int const*(指向const int的指针)转换为int*(指向int的指针)。
由于您将删除不会编辑指针目标的保证,因此这不是隐含的。如果您确实希望这样做,可以使用const_cast(或c-cast),但是通常抛弃const -ness是一个非常糟糕的主意(tm)。
为什么使指针本身为const不会改变任何事情
如果使用版本3使用int const* const(指向const int的const指针),则不会获得比保证在运行a时不会更改变量insert3更多或更少的东西。通过将指针插入列表,您实际上是在复制它。这意味着无论a是否为const,结果列表项都是您在开头指定的类型。
通过将列表放入list<int const* const>中,可以确保以后插入的任何指针都无法更改,并且指向该指针的值只有在明确摆脱指针的const含义之后才能更改。插入是可能的,因为添加const总是隐式地可能

关于c++ - 指向const数据和C++列表的const指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525791/

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