C ++中的不可变列表

Ris*_*wal -1 c++ immutability immutablelist

如何在cpp中创建不可变列表?列表的引用及其数据应保持不变。

我不会在vector或任何其他容器上做包装器类(我知道与本文类似的方法)。

使用constexpr或进行此操作的最佳方法是什么const pointers

Bla*_*aze 7

只需将其声明为const,如下所示:

const std::list<int> constList = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)

类似的方法constList.begin();将返回const_iteratorconstList.push_back(3);不会编译。

将其地址分配给非const指针将不起作用:

std::list<int> *l = &constList; // does not compile
Run Code Online (Sandbox Code Playgroud)

将引用传递给采用非常量引用的函数不起作用:

void a(std::list<int> &list) {}
int main()
{
    const std::list<int> mylist = { 1, 2, 3 };
    a(mylist); // does not compile
}
Run Code Online (Sandbox Code Playgroud)

不修改列表不是解决方案。

创建一个非常量列表,完成构建后,将其移至const列表:

std::list<int> mylist = { 1, 2, 3 };
mylist.push_back(4);
const std::list<int> constList = std::move(mylist);
Run Code Online (Sandbox Code Playgroud)