You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::unordered_map访问未存在键时值是否默认初始化?代码是否合法?

关于std::unordered_map operator[]的行为疑问

代码示例

#include <iostream>
#include <unordered_map>
#include <string>

int main()
{
  std::unordered_map<std::string, int> map;
  std::cout << map["foo"]; // 输出0

  return 0;
}

问题

  1. 未预先初始化就使用map["foo"],这段代码是否合法,还是属于未定义行为(UB)?
  2. std::unordered_map<std::string, int>中的值是否会被默认初始化?

解答

  • 这段代码完全合法,不存在未定义行为。
  • std::unordered_map的operator[]有明确的标准行为:当访问的键(此处为"foo")不存在于容器中时,会自动将该键插入到map中,并为对应的值执行值初始化。对于int类型来说,值初始化的结果就是0,这也是运行代码输出0的原因。
  • 补充说明:这里的初始化是值初始化而非默认初始化,但对于int这种内置类型,两者的结果一致(都是0)。如果是用户自定义类型,值初始化会调用默认构造函数(若存在),而默认初始化可能会留下未初始化的成员(如果类没有用户提供的构造函数)。

内容的提问来源于stack exchange,提问作者mouse_00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 04:50:25