如果我创建像vector<myClass> v(10);
这样的矢量
每个元素的默认值是什么?
此外,如果它是vector<myUnion> v(10)
?
答案 0 :(得分:15)
将向量声明为
时使用的std::vector<>
构造函数
vector<myClass> v(10);
实际上有多个参数。它有三个参数:初始大小(您指定为10),新元素的初始值和分配器值。
explicit vector(size_type n, const T& value = T(),
const Allocator& = Allocator());
第二个和第三个参数具有默认参数,这就是您在声明中可以省略它们的原因。
新元素的默认参数值是默认构造值,在您的情况下为MyClass()
。该值将通过其复制构造函数复制到所有10个新元素。
MyClass()
的确切含义取决于您的课程。只有你知道。
P.S。在实现上述接口时,允许标准库实现使用函数重载而不是默认参数。如果某个实现决定使用函数重载,它可能会在std::vector
中声明一个只有一个参数(大小)的构造函数。但这并不影响最终结果:所有向量元素都应该开始生命,就像它们是值初始化一样。
答案 1 :(得分:1)
你的第二个问题的答案是相似的; vector<myUnion> v(10)
将使用默认构造函数创建一个10 myUnion
的数组。但请注意:1)联合不能拥有构造函数,复制构造函数或析构函数的成员,因为编译器不知道构造,复制或销毁哪个成员,以及2)与类和结构一样,内置成员int这样的类型将默认初始化,也就是说根本不是;他们的价值观将是不确定的。
答案 2 :(得分:0)
vector<myClass> v;
它是一个空的向量,大小和容量为0。