以下内容没有编译(非常冗长的错误,但基本上“无法重载”和“从'const void*‘到’void*‘”的无效转换)。我可以理解为什么push_back()不能编译,因为您不能复制/迁移到Foo* const中,但是为什么不能编译:
#include <vector>
using namespace std;
class Foo;
int main()
{
vector<Foo* const> vec;
}发布于 2015-03-31 21:08:01
向量可能是唯一需要元素为copy assignable的容器。这是因为元素保证连续地存储在内存中。因此,如果超出了容量,就必须分配一个新的块,并重新分配元素。您不能用const元素来完成这个任务。
如果您尝试std::vector<const int>,或者实际上任何const类型,都会出现相同的错误。
发布于 2015-03-31 21:08:47
您正在声明一个包含Foo的const指针的向量,这意味着指针不能被修改。当您在向量中插入元素时,需要向const pointer写入元素(无效)。
您肯定它不是:std::vector<Foo const *> vec;,其中Foo没有被指针修改。
发布于 2015-03-31 21:09:41
向量元素需要为许多操作指定:如果在向量中间插入一个元素,则必须重新分配后面的所有元素。限定类型通常是不可分配的.
但是,如果不执行需要赋值的操作,仍然可以使用不可分配类型的向量。
但是,只有当std::allocator<T>是非const对象类型时才可以使用T,因此std::vector<const int>格式不正确。
https://stackoverflow.com/questions/29378533
复制相似问题