我想了解静态结构体内static std::unordered_map<std::string, struct>
变量的默认值。
以下是我的示例代码:
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
enum MyStateType
{
MY_STATE_NEW,
MY_STATE_RUN,
MY_STATE_FREE
};
struct Foo
{
int num;
MyStateType state;
};
static std::unordered_map<std::string, Foo> map;
std::cout << map["Apple"].num << '\n';
std::cout << map["Apple"].state << '\n';
}
输出结果:
0
0
Program ended with exit code: 0
可以认为在 Foo
内部的变量一开始总是被初始化为 0
吗?
operator[]
。如果键不存在,它们会构造该值。应改用.at()
。 - Henri Menkestd::map
和std::unordered_map
的数组索引operator[]
添加新项是安全的,并且事实上是标准规定的。这些新项将通过 值初始化 的方式添加。除了用户定义构造函数(在其中您需要负责成员初始化)之外,像您这样的平凡类型肯定会被填充为零。 - WhozCraigoperator[]
会默认构造元素,在此情况下将成员变量初始化为零。“当使用默认分配器时,这将导致从键中复制构造出键,并使映射值进行值初始化。” - Henri Menkestd::unordered_map
的操作符[]的情况下,标准保证了值初始化。 - Henri Menke