1. 直接初始化直接调用与实参匹配的构造函数,形式如“T t(u)”。
2. 拷贝初始化:复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象”,形式如“T t=u”。


直接初始化不一定要调用复制构造函数
复制初始化(拷贝初始化)一定要调用复制构造函数


注意:一般而言,在变量初始化时,尽量采用直接初始化形式,而不是拷贝初始化。

1.默认初始化
如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。
  int i; A a;

2.直接初始化
如果不使用等号,则执行的是直接初始化。

 int a();
string str1(“hello”);
string str2(, ‘c’);//这种情况拷贝初始化不能完成
A a(pa);

3.拷贝初始化
如果使用一个等号初始化一个变量,实际上执行的是拷贝初始化。编译器会把等号右侧的初始值拷贝到新创建的对象中去。

 int a = ;
int a = {};
string str1 = “hello”;
A pa; A a = pa;

4.值初始化

显式使用T()或T{},T为类型,括号里为空,称为值初始化

或者容器如vector,vector<int> p(10);其中int类型有默认构造函数,此时库会创建一个值初始化(value-initialized)的元素初值,并赋给容器中所有元素。

目前我个人的理解是:其中int是值初始化了(初始化为0),用这个0赋给p的所有10个元素。vector应该不能算值初始化,而是直接初始化。

 vector <int>v1();//v1有10个元素,每个的值都是0,
vector <int>v2{};//v2有1个元素,该元素的值是10
vector <int>v3(, );//v3有10个元素,每个的值都是1
vector <int>v4{, );//v4有2个元素,值分别是10和1
 string *ps1 = new string;     //默认初始化为空string
string *ps2 = new string(); //值初始化为空string
int *pi1 = new int; //默认初始化;*pi1的值未定义
int *pi2 = new int(); //值初始化为0;*pi2为0

C++ PRIMER:

值初始化:

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

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

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

默认初始化:

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

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

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

C++四种初始化方式的更多相关文章

  1. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  2. HttpwebClient的四种请求方式

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.      本文旨在发布代码,供自己参考,也供大家参考,谢谢. 正题: Ht ...

  3. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (四) —— ContentProvider

    ContentProvider是安卓平台中,在不同应用程序之间实现数据共享的一种机制.一个应用程序如果需要让别的程序可以操作自己的数据,即可采用这种机制.并且此种方式忽略了底层的数据存储实现,Cont ...

  4. 第十七节: EF的CodeFirst模式的四种初始化策略和通过Migration进行数据的迁移

    一. 四种初始化策略 EF的CodeFirst模式下数据库的初始化有四种策略: 1. CreateDatabaseIfNotExists:EF的默认策略,数据库不存在,生成数据库:一旦model发生变 ...

  5. spring security四种实现方式

    spring security四种实现方式 spring(20) > 目录(?)[+] 最简单配置spring-securityxml实现1 实现UserDetailsService 实现动态过 ...

  6. Java连载66-数组的两种初始化方式

    一.数组 1.数组中存储元素的类型是统一的,每一个元素在内存中所占用的空间大小是相同的,知道数组的首元素的内存地址,要查找的元素只要知道下标,就可以快速的计算出偏移量,通过首元素内存地址加上偏移量,就 ...

  7. 《网页设计基础——CSS的四种引入方式详解》

    网页设计基础--CSS的四种引入方式详解     一.行内式:   规则: 1. 行内式是所有样式方法中最为直接的一种,它直接对HTML的标记使用style属性,然后将CSS代码直接写在其中.   格 ...

  8. lua中for循环的四种遍历方式

    lua中for的四种遍历方式区别 table.maxn 取最大的整数key #table 从1开始的顺序整数最大值,如1,2,3,6 #table == 3   key,value pairs 取每一 ...

  9. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一) —— 总览

    Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (一) —— 总览   作为一个完成的应用程序,数据存储操作是必不可少的. ...

随机推荐

  1. 插入jupyter notebook代码

    <iframe src="https://nbviewer.jupyter.org/gist/gaowenxin95/53408e0f1ce268430efaad2cb1f0ca4f& ...

  2. day30 nfs服务器配置

    04. NFS服务部署流程 RPC: 远程过程调用服务程序--- 相当于租房的中介(网络编程支持) 服务端部署 第一个历程: 下载安装软件 rpm -qa|grep -E "nfs|rpc& ...

  3. 机器学习作业(四)神经网络参数的拟合——Python(numpy)实现

    题目下载[传送门] 题目简述:识别图片中的数字,训练该模型,求参数θ. 出现了一个问题:虽然训练的模型能够有很好的预测准确率,但是使用minimize函数时候始终无法成功,无论设计的迭代次数有多大,如 ...

  4. Abp的swagger UI 出现Failed to load API definition.

    Abp 出现Failed to load API definition.如下图: 原因:本次出现的原因是Api里面的方法重名了(只是方法的参数不一样)(可能是controller中的auction上面 ...

  5. C语言-基本数据类型

    一.C语言数据类型深度剖析 1.什么是数据类型? -可以理解为固定内存大小的别名 -数据类型是创建变量的模子 -数据类型是对内存的格式化操作 上面三句话如何理解? 在以前的汇编语言时代,我们要存储一些 ...

  6. 控制台测试ajax

    有的时候需要测试下web项目中post.get请求是否正确,但是这个时候电脑上没有安装测试工具,怎么办呢?直接用浏览器控制台测试,打开网站,F12控制台,在控制台下复制粘贴下面的ajax请求,之后aj ...

  7. QQ第三方登录(一)

    要实现QQ第三方登陆 这就需要QQ方面的支持. 首先  我们需要在QQ开发者网站上注册,https://connect.qq.com/index.html 登陆之后点击应用管理,正常情况下我们是未提交 ...

  8. 2018-2019 ACM-ICPC, Asia East Continent Final L Eventual … Journey

    #include<iostream> using namespace std; ; int cnt[MAX]; int ans[MAX]; int a[MAX]; int main() { ...

  9. linq和匿名方法、委托、匿名委托、lambda

    委托相当于JavaScript中的闭包,c++中的函数指针. c#为了引进这个函数指针,将其进行包装成“委托”,同时将非托管的变成托管的. 1.最初的委托该怎么用 弊端:写的代码量过多,还要写一个显示 ...

  10. c#中的强类型、弱类型和泛型

    强类型和弱类型的变量都有两个属性:类型和值. 强类型的变量类型是不能改变的,弱类型的变量类型是随需改变的,这是强弱的真正含义. 我们在编写c#代码时,变量类型是明确的,不可更改的,如string就是s ...