如果我创建一个向量,例如vector<myClass> v(10);
每个元素的默认值是什么?
另外,如果它是一个vector<myUnion> v(10)
?
如果我创建一个向量,例如vector<myClass> v(10);
每个元素的默认值是什么?
另外,如果它是一个vector<myUnion> v(10)
?
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
. 不过,这不会影响最终结果:所有向量元素都应该开始它们的生命,就好像它们是值初始化的一样。
你的第二个问题的答案是相似的;vector<myUnion> v(10)
将创建一个 10 s 的数组,myUnion
并使用其默认构造函数进行初始化。但是请注意:1)联合不能有具有构造函数、复制构造函数或析构函数的成员,因为编译器不知道要构造、复制或销毁哪个成员,以及 2)与类和结构一样,具有内置的成员int 等类型将默认初始化,也就是说根本不会初始化;它们的值将是未定义的。
vector<myClass> v;
它是一个空向量,大小和容量为 0。