它与此错误的问题相似
关于在 C++ 中将数组存储在 std::vector 中的问题
但出于不同的原因(见下文)。
对于以下 C++ 示例程序:
#include <vector>
int main(int c_, char ** v_)
{
const int LENGTH = 100;
std::vector<char[LENGTH]> ca_vector;
return 0;
}
GCC 4.2.3 编译干净。GCC 4.3.2 发出以下错误:
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:在函数'void std::_Destroy(_Tp*) [with _Tp = char [100 ]]': /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:103: 从 'void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator =字符 (*)[100]]' /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:128: 实例化自 'void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator& ) [with _ForwardIterator = char (*)[100], _Tp = char [100]]' /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_vector.h:300:从 'std::vector::~vector() [with _Tp =字符 [100], _Alloc = std::allocator]' test.cpp:7:从这里实例化 /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88:错误:在“* __pointer”中请求成员“~char [100]” ,它是非类类型'char [100]'
原因显然是这一点
包括/g++-v4/bits/stl_construct.h
template
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
我认为这被称为是由于不正确的数组到指针衰减。
我的问题是: 语言标准中是否有任何内容阻止在 std::vector 中存储数组?或者它只是那个特殊的 GCC 版本中的一个错误?
我相信这应该编译(即 4.2.3 是正确的)。
谢谢马丁