请教大佬一个 c++值初始化的问题

2022-07-15 15:54:12 +08:00
 yaron

使用无序 map 来记录字符串中字符的个数

unordered_map<char, int> strmap;
for (int i = 0; i < s.size(); i++)
{
  strmap[s[i]]++;
}

以上的写法是规范的吗?

strmap[s[i]]++ 看起来好像是先插入,后初始化为 0 ,再进行+1 操作。

但像int a; 这种,a 的值不是未知的吗

762 次点击
所在节点    问与答
8 条回复
Jooooooooo
2022-07-15 15:59:25 +08:00
若是写法让人理解不了, 就换一种更清晰的写法.
MegrezZhu
2022-07-15 16:13:22 +08:00
MegrezZhu
2022-07-15 16:14:04 +08:00
上面这个链接跳转有些问题…记得把后面的[]一起带上
freemon
2022-07-15 16:14:22 +08:00
unorderde_map 元素如果是 int 类型,默认值是 0 ,这个依赖于 stl 的实现,int a 这种也不一定是未知的值,依赖不同编译器的实现,有些编译器会将这种设置为 0 ,有些则默认为寄存器中上次预留的值
404neko
2022-07-15 16:15:21 +08:00
unordered_map 是模板类
int 是基础数据类型

类声明的时候会调用默认构造函数
yaron
2022-07-15 16:23:02 +08:00
解题:
A call to this function is equivalent to:
(*((this->insert(make_pair(k,mapped_type()))).first)).second

strmap[s[i]]++ 相当于:
strmap.insert(make_pair(s[i], int()))
而:
int() 等于 (int)0
daC
2022-07-15 16:23:35 +08:00
T() 的写法是值初始化,对于 int ,也就是零初始化
结合 2L 的链接,你描述的行为是标准的
L4Linux
2022-07-15 17:09:24 +08:00
int 转 char ,signed 与 unsigned 比较。被打一顿不过分。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/866451

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX