首页 > 其他分享 >初始化

初始化

时间:2023-02-20 15:14:28浏览次数:30  
标签:初始化 num1 num2 拷贝 构造函数 string

拷贝初始化和直接初始化

  • 直接初始化直接调用与实参匹配的构造函数,拷贝初始化总是调用拷贝构造函数。
  • 拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个临时对象拷贝到正在创建的对象。
可以发现用=就是拷贝构造函数
string str1("I am a string");//语句1 直接初始化
string str2(str1);//语句2 直接初始化,str1是已经存在的对象,直接调用拷贝构造函数对str2进行初始化
string str3 = "I am a string";//语句3 拷贝初始化,先为字符串”I am a string“创建临时对象,再把临时对象作为参数,使用拷贝构造函数构造str3
string str4 = str1;//语句4 拷贝初始化,这里相当于隐式调用拷贝构造函数,而不是调用赋值运算符函数
  • 为了提高效率,允许编译器跳过创建临时对象这一步,直接调用构造函数构造要创建的对象,这样就完全等价于直接初始化了
    • 当拷贝构造函数为private时:语句3和语句4在编译时会报错
    • 使用explicit修饰构造函数时:如果构造函数存在隐式转换,编译时会报错

初始化和赋值的区别

  • 对于简单类型来说,初始化和赋值没什么区别
  • 对于类和复杂数据类型来说,这两者的区别很大
class A{
public:
    int num1;
    int num2;
public:
    A(int a=0, int b=0):num1(a),num2(b){};
    A(const A& a){};
    //重载 = 号操作符函数
    A& operator=(const A& a){
        num1 = a.num1 + 1;
        num2 = a.num2 + 1;
        return *this;
    };
};
int main(){
    A a(1,1);
    A a1 = a; //拷贝初始化操作,调用拷贝构造函数
    A b;
    b = a;//赋值操作,对象a中,num1 = 1,num2 = 1;对象b中,num1 = 2,num2 = 2
    return 0;
}

标签:初始化,num1,num2,拷贝,构造函数,string
From: https://www.cnblogs.com/xiaoqing-ing/p/17137488.html

相关文章

  • [SSM+layui]汽车出租系统05_工作台开发_(后台首页就是我们说的工作台)、初始化菜单数
    工作台开发文章目录​​工作台开发​​​​什么是工作台​​​​开发工作台​​​​初始化菜单数据​​什么是工作台后台首页就是我们所说的工作台比如我们去看一个其它的......
  • eureka-server初始化
    一、依赖分析查看build.gradle看到,eureka-server主要依赖了eureka-client和eureka-core2个项目,jersey框架和jetty容器二、代码结构分析通过看eureka-serve......
  • 字符串变量初始化
    importre#解析字符串中全局变量并进行替换defresolve_global_var(pre_resolve_var,global_var_dic,global_var_regex='\${.*?}',match2key_s......
  • 【Spring IOC】【六】容器源码解析- initializeBean剩下的初始化工作
    1 前言我们的bean经过的应该就剩下initializeBean这个方法,这个方法对上一步的populateBean属性填充完,做最后的剩余工作,这个里边的东西相比之前几个那可真是让人看着开心......
  • AcWing 每日一题 未初始化警告
    #include<bits/stdc++.h>usingnamespacestd;signedmain(){intn,k,cnt=0;cin>>n>>k;set<int>se;se.insert(0);while(k--){in......
  • JVM初始化一个类包含几个步骤?
    加入这个类还没有被加载和连接,则程序先加载并连接该类加入该类的直接父类还没有初始化,则先初始化其直接父类加入类有初始化语句,则系统依次执行这些初始化语句当执行第......
  • git初始化操作
    Gitglobalsetupgitconfig--globaluser.name"liulei1"gitconfig--globaluser.email"liulei1@wanji.net.cn"Createanewrepositorygitclonessh://git@1......
  • DS-单链表:初始化单链表
    一、定义单链表结构代码:typedefintlinkType; ///<定义链表结点数据域数据类型///@brief链表结点定义typedefstructt_linkNode{structt_linkNode*......
  • Java main方法所在类初始化顺序
    目录1、main方法特性2、与所在类的关系1、main方法特性访问权限是publicmain()是static静态,因此如果在main方法中调用本类的其他方法也必须是静态方法,否则需要先实例化......
  • C++模板类中的静态成员变量的初始化
    变量声明:template<classT,enumEDeviceTypeg_eDeviceType>classILocalDeviceProtocolImpl:publicT{public:ILocalDevicePr......