对于初始化的问题,我之前一直傻傻分不清。有关初始化以及赋值的区别也是一问题,这次回过头来看,配合<<CSAPP>>的内容,对初始化有了一些新的认识。

声明: 在环境/上下文中指定一个变量的名字。也就是说,声明仅仅是让编译器知道,而没有实际分配空间。

初始化:给一个声明后尚未初始化的变量一个有意义的初始值。

赋值 : 销毁一个变量原来的值,并赋予一个新值。相当于改变了一个变量的状态

初始化是在声明一个变量的同时赋予它一个值,而赋值是已经声明过了变量,后续再对它进行赋值操作。对于内置类型:

 {//在一个块中
int i;//默认初始化,不可直接使用
int j=;//值初始化
j=;//赋值
5 }

对于在一个块作用域中的局部变量来说,该变量会默认初始化。而内置类型默认初始化的时候,对其进行操作是违法的,编译器也会进行报错。如果在全局中进行初始化,

//不在块中
int i;//正确,i会被值初始化为0,也称为零初始化

内置类型也是合法的,会被零初始化

静态变量在编译期间就可以确定他们的值,静态变量即使不提供初始值也会被零初始化。此外,类内静态变量同样如此,不过显式初始化是一个比较好的选择。

对于自定义类型和STL中的容器,

class A;
A a=A();//值初始化
std::vector<int> vec1;//默认初始化,调用默认构造函数

一个类对象进行默认初始化和值初始化,必须要有相应的默认构造函数。否则将会报错,因为无法构造这个类。

上面是我自己的一些理解,<<C++ Primer>>总结了值初始化和默认初始化的适用场景:

值初始化:

(1)在数组初始化的过程中,如果提供的初始值数量少于数组的大小,剩下的元素会进行值初始化;

(2)当我们不使用初始值定义一个局部静态变量时;

(3)当我们通过书写形如T()的表达式显示地请求值初始化时;

默认初始化:

(1)当我们在块作用域内不使用任何初始值定义一个非静态变量时,

(2)当一个类本身含有类类型成员且使用合成的默认构造函数时;

(3)当类类型的成员没有在构造函数初始值列表中显式地初始化时;

C++ 值初始化和默认初始化的更多相关文章

  1. c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法

    问题: c#的wcf服务接口在后台通过自定义对象接收前台参数的时候,前台参数即使不传int类型的字段值,后台也会默认初始化为0,由于很多表示状态的int字段都是从0开始的,导致查询的时候有些不想参与查 ...

  2. 【SpringCloud】HystrixCommand的threadPoolKey默认值及线程池初始化

    关于threadPoolKey默认值的疑问 使用SpingCloud必然会用到Hystrix做熔断降级,也必然会用到@HystrixCommand注解,@HystrixCommand注解可以配置的除了 ...

  3. 默认初始化&拷贝初始化&直接初始化&值初始化&列表初始化

    一.各种初始化的形式 /* 定义变量形式一:不指定初始值 */ int a; // 默认初始化 /* 定义变量形式二:指定初始值 */ int b = 1; // 拷贝初始化 int b(1); // ...

  4. java变量和作用域以及成员变量的默认初始化

    Java中的变量有成员变量和局部变量,定义在类中方法之外的变量成为成员变量或者成员字段(域),表示一个类所具有的属性,定义为类的成员变量的变量的作用于是整个类,该变量在定义的时候不需要初始化,在使用前 ...

  5. c++第五天:默认初始化

    1.算数类型.(整型和浮点型) 类型决定了数据所占的比特数以及该如何解释这些比特的内容. 练习2.1... 各种类型在计算机中所占的比特数不同,解释方法不同.有符号要花费一个比特存储符号,最大正值要比 ...

  6. C++:默认初始化

    一.什么是默认初始化 默认初始化,顾名思义,即为在定义变量时如果没有为其指定初始化值,则该变量会被C++编译器赋予默认的值.而变量被赋予的默认值到底是什么,则取决于变量的数据类型和变量的定义位置. 二 ...

  7. 探究c++默认初始化

    按照c++ primer 5th第40页的描述,如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”. 根据变量定义的位置,分为两种情况: 1.定义于任何函数体之外的变量被初始化 ...

  8. c++全局变量,局部变量,内存布局,默认初始化

    全局变量 定义在所有函数之外的变量,main函数之内的变量也是局部变量,Globle variable  未显示初始化时执行默认初始化 局部变量 定义在函数之内的变量,Local variable 未 ...

  9. Pytorch的默认初始化分布 nn.Embedding.weight初始化分布

    一.nn.Embedding.weight初始化分布 nn.Embedding.weight随机初始化方式是标准正态分布  ,即均值$\mu=0$,方差$\sigma=1$的正态分布. 论据1——查看 ...

随机推荐

  1. MySql 基础 基本使用方法

    安装MySQL linux安装:阿里云服务器ecs配置之安装mysqlwindows安装: 解压 管理员身份进cmd执行解压目录下的可执行文件 初始化 D:\mysql-8.0.12-winx64\m ...

  2. MFC对话框使用CPrintDialog实现打印,指定打印机、后台打印

    推荐下 不错. 对话框打印,网上一搜一大堆,基本分2类: A类: CPrintDialog.DoModal,然后在模态对话框里选打印机.打印配置: B类:GetPrinterDeviceDefault ...

  3. Atcoder regular Contest 073(D - Simple Knapsack)

    Atcoder regular Contest 073(D - Simple Knapsack) 传送门 因为 w1≤wi≤w1+3 这个特殊条件,我们可以将每个重量离散化一下,同时多开一维记录选择的 ...

  4. Wireshark抓包工具的简单使用1(界面介绍)

    Wireshark安装完成后,就可以打开,具体运行界面如下 一.菜单——用于开始操作 File ——包括打开.合并捕捉文件,save/保存,Print/打印,Export/导出捕捉文件的全部或部分.以 ...

  5. Flask组件:flask-sqlalchemy & flask-script & flask-migrate

    flask-sqlalchemy组件 项目目录结构: flask目录 # 项目名 |--- flaskdir |--- static # 静态文件 |--- templates # 模板 |--- m ...

  6. JS基础:函数

    函数声明和函数表达式 在 JS 中定义函数的方式有两种:一种是函数声明,一种是函数表达式. 例如: //函数声明 function fun() { ... } //函数表达式 var f = func ...

  7. Linux下汇编语言学习笔记42 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  8. [bzoj5101][POI2018]Powódź_并查集

    Powódź bzoj-5101 POI-2018 题目大意:在地面上有一个水箱,它的俯视图被划分成了$n$行$m$列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无穷大 ...

  9. Charm Bracelet-POJ3624(01背包)

    http://poj.org/problem?id=3624 Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  10. tomcat会自动解压webapps目录下的war包

    如图,把war包放到tomcat的webapps目录,会被自动解压