【发布时间】:2014-10-03 08:14:42
【问题描述】:
我了解到,例如,如果您在全局范围内声明一个 int,
int x; //默认为0;
在本地范围内,
void f() {
int x; //undefined
}
但是,如果我们在全局或局部范围内使用向量:
向量
我们可以通过这样做在本地范围内默认初始化 int 类向量的元素:
int x = int(); //默认为0
我认为如果我们使用 int 的默认构造函数,它会分配在堆中。
- 为什么不能像 T x; 那样在本地范围内默认初始化原始类型?或者
- 在本地范围内,为什么向量(不知道其他容器)使用元素的默认构造函数,而不是像 int 声明一样让它们未初始化?
- 当前方法对这两种类型有什么好处?为什么它们以不同的方式初始化?这与性能有关吗?
【问题讨论】:
-
1) 因为这是语言指定它的方式。 2) 因为这就是 C+ 标准所说的
std::vector应该如何工作。 -
如果调用 int 构造函数,它将不会在堆上分配。仅当您使用
new关键字时。您可以使用int x();或int x = int()。