【发布时间】:2013-03-27 18:39:42
【问题描述】:
在 C++ 中,我希望分配一个固定大小(但大小在运行时确定)std::vector,然后写入该向量中的元素。这是我正在使用的代码:
int b = 30;
const std::vector<int> test(b);
int &a = test[3];
但是,这给了我一个编译器(MSVC 2010 Pro)错误:
错误 C2440:“正在初始化”:无法从“const int”转换为“int &”。转换丢失限定符。
我对 const 的理解是,它使类的所有成员变量都成为常量。例如,以下工作正常:
class myvec
{
public:
myvec(int num) : ptr_m(new int[num]) {};
~myvec() { delete ptr_m; }
void resize(int num) { delete ptr_m; ptr_m = new int[num]; }
int & operator[] (int i) const { return ptr_m[i]; }
int *ptr_m;
};
const myvec test(30);
int &a = test[3]; // This is fine, as desired
test.resize(10); // Error here, as expected
因此,std::vector 似乎将容器的 const-ness 传播到向量的元素,这似乎很奇怪,因为如果我希望元素为 const,我会使用 std::vector<const int>。因此,这让我觉得这是 std::vector 的一个缺点。
无论如何,如何创建一个std::vector,其大小在构造后无法更改,但其元素可以写入?
【问题讨论】:
-
首先创建变量
a,然后执行最后一行。 -
@GamesBrainiac:那么
a不是参考。该错误是由于对向量中的元素有可写引用引起的,这正是我想要的。 -
你应该尝试使用
std::vector<const int>...看看会发生什么
标签: c++ arrays constants stdvector dynamic-arrays