2

为什么不在 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;
4

3 回答 3

6

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

内置数组的不合时宜的行为std::array是发明的原因。

于 2012-11-09T16:53:24.493 回答
4

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

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

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

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

于 2012-11-09T16:54:22.353 回答
1

23.1/3 对此似乎很清楚:

这些组件中存储的对象类型必须满足 CopyConstructible 类型 (20.1.3) 的要求,以及 Assignable 类型的附加要求。

C 风格的数组既不是 CopyConstructible 也不是 Assignable ,因此它们不能存储在容器中。大概这意味着您已经进入了未定义行为的领域,因此编译器可以在这两种情况下为所欲为。

于 2012-11-09T17:47:21.447 回答