ano*_*non 44 c++ scope initialization vector
我从答案明白这个问题 是全局/静态初始化为int值将为0回答这一说,对向量,对象类型的默认构造函数将被调用.
我无法弄清楚 - 当我vector<int> v(10)
在本地函数中时会发生什么 .int的默认构造函数是什么?如果我在vector<int> v(10)
全球宣布怎么办?
我所看到的是, vector<int> v(10)
在本地函数中导致变量为0 - 但我不确定这是因为我的编译器还是固定的预期行为.
Mar*_*k B 43
零初始化在标准中指定为内置类型的默认零初始化/值初始化,主要是为了在模板使用中仅支持这种类型的情况.
请注意,此行为与局部变量不同,例如,int x;
该值保留未初始化的值(如在C语言中继承行为).
Cas*_*Cow 40
它不是未定义的行为,矢量会自动初始化其所有元素.如果需要,您可以选择其他默认值.
构造函数是:
vector( size_type, T t = T() )
对于int,默认类型(返回者int()
)为0.
在本地函数中:
int x;
不保证将变量初始化为0.
int x = int();
会这样做的.
int x();
遗憾的是,两者都没有宣布功能.
Jam*_*lis 10
您正在使用的构造函数实际上有两个参数,第二个参数是可选的.它的声明如下:
explicit vector(size_type n, const T& value = T())
Run Code Online (Sandbox Code Playgroud)
第一个参数是vector
最初创建的元素数量; 第二个参数是要复制到每个元素中的值.
对于任何对象类型T
,T()
称为"值初始化".对于数字类型,它会给你0
.对于具有默认构造函数的类类型,它为您提供了一个使用该构造函数进行默认构造的对象.
关于"神奇的括号"的更多细节,我建议阅读Michael Burr对"类型名称后的括号是否与新的有所区别?"这一问题的出色回答. 它在new
具体使用时讨论了值初始化,但大多数情况下适用于值初始化,只要它可以使用.