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

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

std::map<int> stars ;

int k = stars[10] 会返回什么样的值, 真的是未定义吗? 有没有比较权威的说法?
...全文
866 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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,这些操作就没有了

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧