c++ - std::map<string,int> 值的默认初始化

标签 c++ initialization std

<分区>

这段代码看起来运行良好,它们的默认值 value_type (int) 为 0;它适用于所有情况吗?

std::map<std::string,int> w;
for (const auto& t: str)
   w[t]++;

双呢? map ?默认 0.0?

最佳答案

是的,此代码适用于任何类型的 key ,包括 double。这样做的原因是非常量 operator [] 返回一个 reference 到键处的值,而不是该值的拷贝。它是应用 ++ 运算符的引用。

您显示的代码片段的工作原理如下:

  • 对于 str 容器中 string 类型的每个键 t
  • 在 map w 中搜索给定的键
  • 由于该条目不存在,一个新条目被插入到 map 中
  • 由于条目的键已知,但值未知,因此默认(值初始化,即 0 for int ) 值的对象被创建
  • 对新创建对象的引用(在本例中,int& 初始化为零)返回给调用者
  • ++ 运算符应用于从 [] 返回的引用,这会将 0 更改为 1(或 0.01.0 等)

关于c++ - std::map<string,int> 值的默认初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16177596/

相关文章:

c++ - 以正确的方式将 3D 数组作为参数传递给 C++14 中的函数

大括号或等于初始化程序和初始化列表之间的 C++ 评估顺序?

java - java中变量的初始化和声明问题

c++ - mem_fun_ref : unresolved overloaded function type

c++ - 为什么我在使用enable_shared_from_this()时会遇到异常?

c++ - 重载运算符 +。字符串类

c++ - c++ : linker command failed 中头文件的问题

c++ - 将汇编代码移植到 C++

c++ - 初始化顺序

c++ - 在 lambda 表达式中使用外部函数