浮点数组的C ++向量构建麻烦

时间:2012-11-09 16:48:43

标签: c++ visual-c++

为什么在VS 2010 C ++中没有这个版本?

typedef float test[10];
std::vector<test> test_me(100); // wanted initial capacity of 100

虽然这可以很好地构建

typedef float test[10];
std::vector<test> test_me_now;

3 个答案:

答案 0 :(得分:6)

数组既不是可复制的,也不是可构造的。对于大多数操作,std::vector至少需要其中一个。或者至少是涉及实际将事物放入向量的操作。由于默认构造函数没有将任何内容放入向量中,因此使用它没有任何问题。

内置数组的不良行为是std::array被发明的原因。

答案 1 :(得分:4)

std::vector<test> test_me(100);

将尝试调用不存在的testtest()的默认构造函数。如果您想增加容量,而不是具有100元素的矢量,请尝试

std::vector<test> test_me_now;
test_me_now.reserve(100);

虽然很难看出如何使用这样的矢量,但大多数操作都是无效的。

答案 2 :(得分:1)

23.1 / 3似乎很清楚:

  

存储在这些组件中的对象类型必须符合   CopyConstructible类型的要求(20.1.3),以及附加的   可分配类型的要求。

C风格的数组既不是CopyConstructible也不是Assignable,因此它们不能存储在容器中。据推测,这意味着您已经进入了未定义行为的领域,因此编译器可以在两种情况下都做任何喜欢的事情。