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
考虑代码:
#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