0

如果我创建一个向量,例如vector<myClass> v(10); 每个元素的默认值是什么?


另外,如果它是一个vector<myUnion> v(10)

4

3 回答 3

15

std::vector<>将向量声明为时使用的构造函数

vector<myClass> v(10);

实际上有不止一个参数。它具有三个参数:初始大小(您指定为 10)、新元素的初始值和分配器值。

explicit vector(size_type n, const T& value = T(),
                const Allocator& = Allocator());

第二个和第三个参数具有默认参数,这就是您可以在声明中省略它们的原因。

新元素的默认参数值是默认构造的,在您的情况下是MyClass(). 该值将通过其复制构造函数复制到所有 10 个新元素。

究竟是什么MyClass()意思取决于你的班级。只有你知道。

PS 标准库实现在实现上述接口时允许使用函数重载而不是默认参数。如果某些实现决定使用函数重载,它可能会在std::vector. 不过,这不会影响最终结果:所有向量元素都应该开始它们的生命,就好像它们是值初始化的一样。

于 2009-11-24T05:05:35.140 回答
1

你的第二个问题的答案是相似的;vector<myUnion> v(10)将创建一个 10 s 的数组,myUnion并使用其默认构造函数进行初始化。但是请注意:1)联合不能有具有构造函数、复制构造函数或析构函数的成员,因为编译器不知道要构造、复制或销毁哪个成员,以及 2)与类和结构一样,具有内置的成员int 等类型将默认初始化,也就是说根本不会初始化;它们的值将是未定义的。

于 2009-11-24T16:28:17.733 回答
1
vector<myClass> v;

它是一个空向量,大小和容量为 0。

于 2009-11-24T04:50:37.293 回答