我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:双彩网 > 置类型 >

c++ primer“内置类型的默认初始化”到底指什么?书中p40说和定

归档日期:06-24       文本归类:置类型      文章编辑:爱尚语录

  c++ primer,“内置类型的默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外

  c++ primer,“内置类型的默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外

  c++primer,“内置类型的默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外初始化为0,在函数体内则未定义,我试了一下,确实是这样;书p40之后提到默认初始化时就根本...

  c++ primer,“内置类型的默认初始化”到底指什么?书中p40说和定义的位置有关,在函数体外初始化为0,在函数体内则未定义,我试了一下,确实是这样;书p40之后提到默认初始化时就根本不管定义的位置,都是未定义,比如int *p = new int,此语句中*p的值未定义。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部能自动初始化的只是静态存储区的成员(全局成员,static声明成员都放在静态存储区),new出来的空间是操作系统自动分配的堆空间,所以不会自动初始化0。更多追问追答追问我问的是:什么叫默认初始化?(仅针对内置类型,不考虑类)追答C++好像就没停过默认初始化这名字。有几种可能与初始化有关:

  你说的是哪种?追问这些具体的我都知道。就是搞不清到底啥是默认初始化。我把书里原话发给你。追答发吧,c++ primer这书我也看过,你说下第几章。最后解释下上面那个问题:申请一个空间后到底会不会给他初始化,完全取决于这个空间在哪申请的,如果是在全局域申请的,那么会自动初始化为0,想你所说的int *p = new int;这句话什么意思?首先申请一个int大小的空间,并且让指针p指向他,那么这个int因为是new申请的,所以他是在堆申请,所以就不会初始化为0.存储空间申请分为三种:静态空间,堆空间,栈空间追问但p40之后用到默认初始化这个词时,总说:执行默认初始化时,内置类型的值是未定义的顺便给我解释一下啥叫值初始化追答执行默认初始化时,内置类型的值是未定义的.这句话是有前提的,前提是什么,前提就是这个内置类型在哪申请的空间。

  int b;b也是内置类型,但是他在函数体申请,所以是在栈申请的空间,所以值未定义

  int *p=new int;new出来的空间都是在堆申请的,有操作系统自动分配可用空间,所以不会初始化

  }追问总的说,就是书写的有问题?“值初始化”你还没解释,见p88,书中只针对vector讲了下值初始化,并没有普遍的定义值初始化。对内置类型值初始化,我的理解就是把对象初始化为二进制码为0的一个值,不知道对不对追答我用现实的例子和你说吧,比如,你去买水,假如你在中山路买这瓶水,如果水上面有价格标签,那么按照这个价格付钱,这就是有初始化,假如这个水没标签,那么他就默认是3元,这叫默认初始化。但是这是在中山路的规则,如果你去北京路,同样的水,如果写了标签,按照标签支付,如果没写标签,则价格未知。这就是北京路的规则。同样的水(内置类型)在两个地方买(在不同的存储区申请)有不同的规则。追问哦,知道了,书中所说的位置理解为你所说的三个位置,好像就没有矛盾了,我原来只盯着函数体外函数体内。uninitialize包含于default initialize?追答不论你现在能不能看懂,如果以后能懂了,也可以回来看下,我给你做简单的分类:

  1)内置类型:就是非用户创造的类型,如int ,char,用户定义类型就是类和结构。例如struct A

  2)在静态存储区申请的内战类型(int,char),有两种,第一种,在main()函数外面的,第二种,在函数体里面的(包括main函数)用static 申请的,都是属于在静态存储区申请的空间

  2)堆空间申请,由程序员主动申请和撤销,C的写法是malloc,c++是new,C++也能用malloc,但是必须定义头文件stdlib

  3)栈空间,就是函数体里面申请的变量,并且没有加static前缀,他在函数执行完同时空间被计算机收回。虽然堆和栈不怎么了解,但你写的关于它们的定义我基本看得懂。辛苦你打这么多字啦,我会加分给你的!要是书里也分这三个位置来讲,我大概就不会糊涂了,但书上根本不讲堆栈,这写的着实让我蛋疼不是的,一开始讲这些会让读者失去信心的,因为这还涉及到同名变量的问题,不同文件同名变量的问题,函数体成员的生命期等问题,这些在学习名字空间时候会在提到的。学习的原则就是没学到的东西忽略它。啊,堆栈还和namespace有关啊,好吧,这在书的很后面了,暑假估计学不到那了。虽然对书中的“默认初始化”还是有些困惑,但要是抛开书,看你的,倒是清楚了很多。真的谢谢你了。恩,好好努力吧,C++就是一个很好玩的智力游戏,有什么问题都可以一起讨论。

  展开全部“书p40之后提到默认初始化时就根本不管定义的位置,都是未定义”

  p40之后哪页?所在段落。具体一点。更多追问追答追问很多地方。比如12.1.2那页追答“很多地方”

  这个么?里面哪段?——你用的primer什么版本,12.1整章通篇没提到“默认初始化”这词。追问我之前看了都没去管,看到12.1.2忍不住来百度问了。你看的是不是c++primer啊?第五版追答没有实例,就是空说空讲了;没有意义。

  C++的初始化(Initialization)分类,括号中为直译,冒号后为存在这种初始化的声明。

  每一种初始化的具体解释可能很长,轻易不能解释清楚,这里从略,有兴趣者可自行Google

  这句话的意思是,具有自动或者动态存储期的对象在没有初始化的时候执行的是默认初始化,如果没有做那么得到的是不确定的值;静态存储期的对象执行的是零初始化。

  换句话说,该书中这句话并不是特别严谨。。不过影响不大,记住像int这样的类型在外面或者有static修饰的时候默认初始化为0,在函数内部的时候不默认初始化就行了。

  我这里暂时没有找到相关的话,因为关于初始化实在是有点杂乱,但是根据这句(3.6.2 2)

本文链接:http://kathala.net/zhileixing/158.html