在 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 在构造后无法更改其大小,但可以写入其元素?