我是一名高中编程老师,所以我想把这件事做好:
在 C++ 中,当我创建整数(或其他基本类型)向量时,它们是否会初始化为零?
这段代码产生了 100k 个零,所以它似乎已经初始化了。我想确认一下,但我没有完全理解参考文档中的术语。
vector<int> nums(100000);
for (int i = 0; i < nums.size(); i++) {
cout << nums[i];
}
当你这样做时
vector<int> nums(100000);
为向量选择的构造函数具有以下形式
constexpr explicit vector( size_type count,
const Allocator& alloc = Allocator() );
并检查 cppreference 我们得到这个构造函数
使用
default-inserted 实例构造容器。没有复制。 因此,如果我们通过链接了解默认插入的对象是什么,我们就会明白count
默认情况下,这将对对象进行值初始化,如
T
(C++20 之前)
(C++20 起)。如果不希望进行值初始化,例如,如果对象是非类类型并且不需要清零,则可以通过提供自定义 Allocator::construct 来避免。 因此所有对象都已进行值初始化,并且值初始化::new((void*)p) T()
std::construct_at(p)
是零初始化。