int bool float 这些类型有默认值么?

xt_jat 2005-06-16 02:14:50
比如我这样定义

std::map<int> stars ;

int k = stars[10] 会返回什么样的值, 真的是未定义吗? 有没有比较权威的说法?
...全文
754 点赞 收藏 7
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fireseed 2005-06-16
系统不可能知道你想把bool初始赋为true还是false

记得,0不是所有数据的默认值。
回复
xt_jat 2005-06-16
哈哈,对不起,应该写成这样

std::map<int, int>

我问这个问题的初衷是想解决这类问题

设计模式中有个null模式, 使用这个模式后就不需要那么多的错误检测了。 
因此我想在一些简单应用中也借用类似的思想
应此,如果是std::map<int, MyStruct> my_map 这类的,我会给它加上默认构造函数
就算我没对my_map[10]赋值

我这样用 MyStruct ms = my_map[10] 也不会出错。

但对象int ,bool 这类基本类型 一直没有太好的办法,所以才有一问


回复
newbiestar 2005-06-16
哦对了,当你使用map的时候好像不能使用std::map<int>这样的东西吧?应该是list、deque、vector才有这样的行为吧(set也勉强算得上)?

map至少要两个模板类型参数的……
回复
newbiestar 2005-06-16
另外,一星高人问问题给20分很丢人的哎……至少也要给101才能体现出高人的价值……
回复
newbiestar 2005-06-16
有默认值,当你写下int i = int();的时候就会给一个默认的值。

但是当你仅仅通过int i在函数的运行栈中安置i的时候,i里面保存的值其实是上次运行过程中在这个位置保存的值。另外,对于数组,没有被显式初始化的部分都会被置为该类型的默认值……

譬如:
int ia[10] = {0};//ia[0]到ia[9]都是0了
回复
fireseed 2005-06-16
你说的并不是内置类型,而是map。

这些封装类有可能会初始化你的变量,比如将基赋为0。但map是不会这么干的。
回复
fireseed 2005-06-16
没有的

系统分配内置类型的变量的时候,只是简单的在内存中开一块区域,然后把地址给你。而这段内存你永远不知道是什么数值。系统内存是虽然看上去每个程序都是独立的,但这是映射过的假象,在底层,所有的程序都调用的是同一个内存。无数个程序在你用这个内存之间就或读或写过这段内存了,所以,可以说初始值是随机的。

当然,在VC的Debug状态,任何分配的内存都会被赋为0xCC这个样子,这是为了方便调试。一但到了Release,这些操作就没有了
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告