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