对于c++中的向量,int数据类型默认初始化吗?

问题描述 投票:0回答:1

我是一名高中编程老师,所以我想把这件事做好:

在 C++ 中,当我创建整数(或其他基本类型)向量时,它们是否会初始化为零?

这段代码产生了 100k 个零,所以它似乎已经初始化了。我想确认一下,但我没有完全理解参考文档中的术语。

    vector<int> nums(100000);
    
    for (int i = 0; i < nums.size(); i++) {
        cout << nums[i];
    }
c++ vector
1个回答
0
投票

当你这样做时

vector<int> nums(100000);

为向量选择的构造函数具有以下形式

constexpr explicit vector( size_type count,
                           const Allocator& alloc = Allocator() );

并检查 cppreference 我们得到这个构造函数

使用

count
default-inserted 实例构造容器。没有复制。

因此,如果我们通过链接了解默认插入的对象是什么,我们就会明白

默认情况下,这将对对象进行值初始化,如
T

(C++20 之前)

::new((void*)p) T()
(C++20 起)。如果不希望进行值初始化,例如,如果对象是非类类型并且不需要清零,则可以通过提供自定义 Allocator::construct 来避免。

因此所有对象都已进行值初始化,并且值初始化
std::construct_at(p)

是零初始化。

    

© www.soinside.com 2019 - 2024. All rights reserved.