为什么在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;
答案 0 :(得分:6)
数组既不是可复制的,也不是可构造的。对于大多数操作,std::vector
至少需要其中一个。或者至少是涉及实际将事物放入向量的操作。由于默认构造函数没有将任何内容放入向量中,因此使用它没有任何问题。
内置数组的不良行为是std::array
被发明的原因。
答案 1 :(得分:4)
此
std::vector<test> test_me(100);
将尝试调用不存在的test
,test()
的默认构造函数。如果您想增加容量,而不是具有100
元素的矢量,请尝试
std::vector<test> test_me_now;
test_me_now.reserve(100);
虽然很难看出如何使用这样的矢量,但大多数操作都是无效的。
答案 2 :(得分:1)
23.1 / 3似乎很清楚:
存储在这些组件中的对象类型必须符合 CopyConstructible类型的要求(20.1.3),以及附加的 可分配类型的要求。
C风格的数组既不是CopyConstructible也不是Assignable,因此它们不能存储在容器中。据推测,这意味着您已经进入了未定义行为的领域,因此编译器可以在两种情况下都做任何喜欢的事情。