std::unordered_map 中 std::array 的值初始化

Value-initialization of std::array inside std::unordered_map

考虑代码:

#include <unordered_map>
#include <array>
#include <iostream>
int main () {
        std::unordered_map<int, std::array<int, 5>> map;
        map[42][0] = 1;
        for (int i = 0; i < 5; i++) {
                std::cout << map[42][i] << " ";
        }
}

这会在我的系统上打印 1 0 0 0 0。保存在 std::map 中的 std::array 的内容在插入时进行了值初始化(即数组中的所有整数都设置为 0)。标准是否保证这一点?我不应该期望用作地图值的数组包含垃圾?

如果键不存在,

运算符[] 插入value_type(key, T())。这个函数等价于return insert(std::make_pair(key, T()))

T()表示默认初始化

自 c++17 起 这个函数相当于returnthis->try_emplace(key).first->second

emplace/try_emplace 在运算符 []

的情况下构造默认初始化值

来自 https://en.cppreference.com/w/cpp/container/map/operator_at