C++ 直接初始化和复制初始化

C++直接初始化与复制初始化的区别深入解析 C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例形式讲述二者之间的区别。供大家参考之用。具体分析如下: 一、Primer中的说法 首先我们现来看看经典是怎么说的: “当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象” 还有一段这样说: “通常直接初始化和复制初始化仅在低级别优化上存在差异,然而,对于 阅读详情
在C++里,对象初始化是一个非常重要但又容易令人混淆的问题。这里是自己的一些总结。

一。初始化与赋值的含义:
初始化:包括创建(或说定义)对象并且赋给初值。(如果一个对象只被创建而没有被初始化,则该变量只能用于被赋值)。
赋值: 擦除对象的当前值并用新值代替。

二。内置类型:

(一)直接初始化:

1.空初始化:即无参数无括号形式
如int i,new int,new int[10].当在所有函数之外时,初始化为0;当在某一函数中时,没初始化。
2.值初始化:即无参数有括号形式,且括号只能在类型名后,而不能在变量名之后,即只能创无名对象。
对象被值初始化为0.
如:int() //创建了一个无名对象,其被值初始化为0.一般将该无名对象初始化化或赋值给某有名对象,或直接作为无名对象使用
new int();
new int[10]();//创建了一个无名对象,其被值初始化为0.一般将该无名对象初始化化或赋值给某有名对象
vector<int> vi();//这是vector类等容器定义的一个特殊的构造函数。
3.显式初始化:即有参数有括号形式,且当为有名对象时括号在对象名之后,为无名对象时括号在类类型名之后。
如:int i(5);
new int(5);
(二)复制初始化:

1.形式1:int i=5;
2.形式2:int i1=5;
int i2(i1)或int i2=i1;
3.形式3:int i(int(5))或int i=int(5);

三。类类型:

  (一)直接初始化:

    1.空初始化:即无参数无括号形式
classA obj或new classA,new classA[10].当classA有默认的构造函数时,用该默认构造函数初始化;
若classA无默认的构造函数时,则不能这样定义。
 2.值初始化:即无参数有括号形式,且括号只能在类型名后,而不能在变量名之后,即只能创无名对象或者在类的初始化列表中。
若有默认构造函数,则用这个默认构造函数初始化
若无任何构造函数,则会使用值初始化,具体产生什么样的初始值,我有疑问??????
若无默认构造函数,但有自定义的构造函数,则不能用值初始化。
如:
classA(); //创建了一个无名对象,一般将该无名对象初始化化或赋值给某有名对象,或直接作为无名对象使用
new classA();
new classA[10]();
vector<classA> vi(10);//这是vector类等容器定义的一个特殊的构造函数。
 3.显式初始化:即有参数有括号形式,且当为有名对象时括号在对象名之后,为无名对象时括号在类类型名之后
如:classA obj(paralist);
new classA(paralist);

(二)复制初始化:

1.形式1: classA obj=onepara;//classA中有一个非explicit的只有一个形参或其引用(onepara与其能匹配)的构造函数才行。
2.形式2: classA obj1=onepara或classA obj1(paralist);
classA obj2(obj1)或classA obj2=classA obj1;
3.形式3: classA obj2(classA(paralist))或classA obj2=classA(paralist);


注意1:在初始化式中符号“=”不是赋值操作符,它能呼叫复制构造函数;
注意2:复制构造函数就是指仅有一个形参且该形参是本身类类型的const引用的构造函数;
注意3:const对象的初始化同上,只是初始化后其值不能再更改;
注意4:引用类型对象的初始化:若不初始化,则其没有意义;
非const引用只能指向 同类型的 非const的 对象
const引用能指向 相关类型的 const或非const的 对象或字面值,但不可以通过该引用去修改其绑定的对象。

ACM论文LaTeX模板解析(三)| 文章顶部信息(Top matter))Part 1 文章顶部信息(Top matter))Part 1,文章类型、作者信息等 阅读详情

相关推荐

OLED 驱动模块程序代码

作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数。 本文介绍的是 OLED, 常见代表有 0.96 寸的OLED,网上也有很多相关的驱动代码,但是大部分代码都是能用即可,不是特别关注驱动代码的整体架构,以下是个人整理的 OLED 驱动代码,支持配置 SPI 和 IIC 两种接口方式(目前只是测试了 SPI,IIC 有待验证)。

大橙子的博客 4290

C++中直接初始化和拷贝初始化

一、Primer中的说法 首先我们来看看经典是怎么说的: “当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象” 还有一段这样说, “通常直接初始化和复制初始化仅在低级别优化上存在差异,然而,对于不支持复制的类型,或者使用非explicit构造函数的时候,它们有本质区别: ifstream file1("filename"

qq_38915078的博客 856

如何在NVIDIA CX6 网卡和华为CE交换机上为RDMA协议使能DCQCN和PFC

【代码】如何在NVIDIA CX6 网卡和华为CE交换机上使能DCQCN和PFC。

Markchen7788的博客 5094

【C++】【基础知识】直接初始化与拷贝初始化

文章来源,建议看原文:直接初始化与拷贝(复制)初始化 认识这两种初始化有助于我们加深对语言的理解,可以更好的优化代码~ 我们常见的几种初始化的形式: string str1 = "first"; //拷贝初始化,编译器允许把这句话改写为string str(“first”),但是string类必须有public的拷贝(移动)构造函数 string str2(10,'a'); //直接初始化 string str3(str2); //直接初始化 string str4 =

YJYS_ZHX的博客 1306

libnice和coturn这两个库有交叉实现的地方,具体有啥区别?

TurnAdmin:是一个TURN的管理工具,此工具能被用来管理用户账号的增删改查。 TurnServer:是TURN和STUN的服务器实现。 Turnutils_uclient: 模拟多个UDP、TCP、TLS或DTLS客户端 Turnutils_peer: 一个简单的无状态UDP-ECHO服务器,用作中继模式中的最终服务器 Turnutils_stunclient: 一个简单的STUN客户端例子 Turnutils_rfc5769check: 检查STUN/TURN协议实现的正确性。 我们..

Langeldep的专栏 1320

实测有效!YOLOv8融合EMA注意力机制后,在无人机航拍目标检测中的性能提升对比

本文详细介绍了YOLOv8融合EMA注意力机制在无人机航拍目标检测中的性能提升效果。通过多尺度特征融合和通道-空间双重注意力机制,EMA模块显著提升了小目标检测的准确率,mAP@0.5平均提升4.2%,同时保持推理速度基本不变。文章还提供了模型定制、训练技巧和实际部署优化的全流程指南。

weixin_33704234的博客 391

C++-直接初始化和拷贝初始化

文章目录初始化拷贝初始化直接初始化构造函数与拷贝构造函数拷贝初始化与拷贝构造函数例子 初始化 变量的初始化有两种方式: 直接初始化(direct initialization) 拷贝初始化(copy initialization) 拷贝初始化 如果使用等号(=)初始化一个变量,则执行的是拷贝初始化。 直接初始化 不使用等号的,则是直接初始化。 构造函数与拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数 拷贝初始化与拷贝构造函数 拷贝初始化依

mrbone11的博客 1182

CTF-Web习题:2019强网杯 UPLOAD

本题涉及知识点:代码审计、文件上传漏洞、反序列化漏洞

LJW123487的博客 1903

C++直接初始化和复制初始化

(1)复制初始化的基本原理 我们知道,对象在内存中的直接表象是在内存中占有一个一定大小的空间。分配空间是建立对象的第一步。但是刚刚分配的空间就像一个没有开垦的荒田,或者是前面对象占有之后留下来的残余,从理论上讲,由于不管是什么大家都是0101,所以就算没有初始化也是有值的,只是这个值你是不能正确使用的。所以建立对象的关键在于如何对该对象所占有的空间进行正确的初始化。 初始化虽然与赋值的结果

wait009alone的专栏 645

[Dify实战] [安全合规] 用 Dify 优化安全巡检:从经验驱动到标准闭环-带绑定资源

摘要:企业信息系统安全管理中,安全合规巡检面临标准不统一、整改难追踪等痛点。本文提出基于Dify工具的智能化解决方案,通过自动化工作流实现标准检查清单生成、风险等级标注、整改建议输出及审计记录归档。方案采用结构化Prompt模板和Markdown输出格式,涵盖账号权限、数据安全等核心维度,并提供证据收集建议和闭环管理机制,帮助组织从人工经验驱动转向数据流程驱动的合规管理。配套可导入Dify的工作流文件将随后发布。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 272

Android PMS——概述(一)

PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用

小旭的专栏 1668

C++ 直接初始化和拷贝初始化

直接初始化和拷贝初始化

Tony的博客 226

SpringBoot整合LangChain4j实现RAG检索实战详解

本文介绍了使用LangChain4j框架在Java生态中构建RAG(检索增强生成)应用的最佳实践。作为最接近Python LangChain的Java实现,LangChain4j提供了文档解析、向量化存储到检索增强的全套组件,并与SpringBoot深度集成。文章通过电商智能客服场景,详细演示了从零搭建RAG系统的完整流程:包括使用PostgreSQL+pgvector作为生产级向量数据库、文档加载与向量化处理、声明式AI服务实现以及查询压缩、结果重排等进阶优化技巧。同时对比了内存模式与生产级向量库的差异,

分享AI、区块链技术及应用,未来已来 432

C++中的复制初始化与直接初始化

C++ Primer里说过,在C++中,初始化不等于赋值,初始化是指创建变量并给变量赋初值,而赋值是指擦除变量的当前值并用新值替换。C++中有两种初始化方法,直接初始化和复制初始化。直接初始化是指使用 Object obj(patamer)这样的语句,Object可以是内置类型或者用户自定义的类类型;而复制初始化是指Object obj = obj1。 1)内置类型的初始化    以int型为

miludeyingxiong的专栏 1015

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++直接初始化与复制初始化<一>

现在正式对C++中对象建立和初始化做一个总结。 (1)复制初始化的基本原理 我们知道,对象在内存中的直接表象是在内存中占有一个一定大小的空间。分配空间是建立对象的第一步。但是刚刚分配的空间就像一个没有开垦的荒田,或者是前面对象占有之后留下来的残余,从理论上讲,由于不管是什么大家都是0101,所以就算没有初始化也是有值的,只是这个值你是不能正确使用的。所以建立对象的关键在于如何对该对象所占有

zou_J_L专栏 675

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++类的直接初始化和复制初始化举例

(1)对于一般的内建类型,这两种初始化基本上没有区别。           int a(5);//直接初始化           int a=5;//复制初始化           int a=int (5);//直接初始化 (2)当用于类类型对象时,初始化的复制形式和直接形式有所不同:          直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。

shengwusuoxi的专栏 1283

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

c++中的直接初始化与复制初始化

按照C++   Primer第四版中文版13.1节中的说法: 1.对象的定义 回忆一下,C++支持两种初始化形式(2.3.3节):直接初始化和复制初始化。复制初始化使用=符号,而直接初始化将初始化式放在圆括号中。 当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象(7.

NicolasHe的专栏 2320

C++的直接初始化与复制初始化的区别

本文转载自:负一的平方根 https://sqrt-1.me/?p=241          修改了部分地方 C++中的直接初始化指的是直接调用类的构造函数进行初始化,如下例如 string a; //调用默认构造函数 string a("hello"); //调用参数为const char *类型的构造函数 string b(a); //调用拷贝构造函数 复制初始化指的是用“=”号来初始...

qq936836的专栏 2369

C++中直接初始化与复制初始化

C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例形式讲述二者之间的区别。供大家参考之用。具体分析如下: 一、Primer中的说法 首先我们现来看看经典是怎么说的: “当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对

BaldwinGO的博客 279

C++直接初始化和复制初始化1

这篇文章主要介绍了C++直接初始化与复制初始化的区别深入解析,是很多C++初学者需要深入了解的重要概念,需要的朋友可以参考下 C++中直接初始化与复制初始化是很多初学者容易混淆的概念,本文就以实例形式讲述二者之间的区别。供大家参考之用。具体分析如下: 一、Primer中的说法 首先我们现来看看经典是怎么说的: “当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接...

weixin_30687811的博客 85

c++直接初始化和复制初始化 理解

直接初始化拷贝初始化的区别分析

Nichalos_Song的博客 1864

C++直接初始化和复制初始化2

现在正式对C++中对象建立和初始化做一个总结。   (1)复制初始化的基本原理   我们知道,对象在内存中的直接表象是在内存中占有一个一定大小的空间。分配空间是建立对象的第一步。但是刚刚分配的空间就像一个没有开垦的荒田,或者是前面对象占有之后留下来的残余,从理论上讲,由于不管是什么大家都是0101,所以就算没有初始化也是有值的,只是这个值你是不能正确使用的。所以建立对象的关键在于如何对该对象所...

weixin_33895016的博客 120
上一篇: 复制构造函数(拷贝构造函数)
下一篇: C++ 智能指针
seadplus
博客等级 码龄15年 57粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值