【发布时间】:2011-12-19 05:49:45
【问题描述】:
以下声明通过编译检查:
int arr[3];
vector<int[3]> vec; // ok !!
当尝试将vec 实际用作时,
vec.push_back(arr);
它会导致许多错误,例如:
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: ISO C++ forbids initialization in array new [-fpermissive]
/usr/include/c++/4.6/bits/vector.tcc:314:4: error: invalid array assignment
/usr/include/c++/4.6/ext/new_allocator.h:118:30: error: request for member ‘~int [3]’ in ‘* __p’, which is of non-class type ‘int [3]’
此外,vec 也不是push_back() int*。
这里到底出了什么问题? C++11 解决了这样的问题吗?
【问题讨论】:
-
您不能将数组存储在容器中,因为它们不可分配。仅当您执行
push_back时才会尝试赋值运算符,这就是您的代码在没有它的情况下编译的原因。 -
@SethCarnegie,你是对的。这应该是一个答案。我错过了数组不可分配的事实。
标签: c++ arrays vector compiler-errors