如何在cpp中制作不可变列表?列表的引用和它的数据一样应该是常量。
我不会在 vector 或任何其他容器上创建包装类(我知道类似于本文的方法)。
constexpr
使用or的最佳方法是什么const pointers
?
如何在cpp中制作不可变列表?列表的引用和它的数据一样应该是常量。
我不会在 vector 或任何其他容器上创建包装类(我知道类似于本文的方法)。
constexpr
使用or的最佳方法是什么const pointers
?
Just declare it as const
, like this:
const std::list<int> constList = { 1, 2, 3 };
Methods like constList.begin();
will return a const_iterator
and calls like constList.push_back(3);
will not compile.
Assigning its address to a non-const pointer won't work:
std::list<int> *l = &constList; // does not compile
Passing a reference to a function that takes a non-const reference doesn't work:
void a(std::list<int> &list) {}
int main()
{
const std::list<int> mylist = { 1, 2, 3 };
a(mylist); // does not compile
}
Not modifying the list is not a solution.
Make a non-const list, and once you're done building it, move it to a const
list:
std::list<int> mylist = { 1, 2, 3 };
mylist.push_back(4);
const std::list<int> constList = std::move(mylist);
您可以简单地将其用作const std::list<T>
. 以下代码中的两个指针都将打印出相同的值。
#include <iostream>
#include <list>
using T = double;
void some_function(const std::list<T>& list) {
const double * ptr = &(*list.begin());
std::cout << ptr << "\n";
//list.push_back(3.0);//error list is const
}
int main() {
std::list<T> list{3.4,-42};
const std::list<T>& const_list = list;
const double * ptr = &(*const_list.begin());
std::cout << ptr << "\n";
//const_list.push_back(3.0);//error list is const
some_function(list);
}
不存在不可变列表..如果您想使任何列表不可变,那么就去做->“创建一个名为 class 的包装器,并在包装器类中创建 stl 列表的对象,并且不要在任何类中提供任何函数并玩游戏无论是什么对象......”现在你的列表是不可变的......