爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      首页 知识中心 软件开发 文章详情页

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      2023-03-30 09:59:46 阅读次数:582

      拷贝,C++,构造函数

      博主进行了进一步的文章整理和格式调整

      ​

      c++拷贝构造函数(深拷贝,浅拷贝)详解

      1.什么是拷贝构造函数

           首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:

       

      int a=100;
      int b=a;

       

       

       

        而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。

        下面看一个类对象拷贝的简单例子。

       

      #include<iostream>
      using namespace std;
      class CExample
      {
      private:
      int a;
      public:
      // 构造函数
      Example(int b) { a=b; printf("constructor iscalled\n"); }
      // 拷贝构造函数
      CExample(const CExample & c) { a=c.a; printf("copyconstructor is called\n"); }
      // 析构函数
      ~CExample() { cout<<"destructor is called\n"; }
      // 普通函数
      voidShow() { cout<<a<<endl; }
      };
      int main()
      {
      CExampleA(100);
      CExampleB=A;
      B.Show();
      return0;
      }

       

         运行程序结果如下:

       C++拷贝构造函数(深拷贝,浅拷贝)详解

            结果为100,从以上代码的运行结果可以看出,系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。

          CExample(constCExample& C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。

      2.拷贝构造函数的调用时机

      2-1.当函数的参数为类的对象时

       

      #include<iostream>
      using namespace std;
      class CExample
      {
      private:
      int a;
      public:
      CExample(int b) { a=b; printf("constructor is called\n"); }
      CExample(const CExample & c) { a=c.a; printf("copyconstructor is called\n"); }
      ~CExample() { cout<<"destructor is called\n"; }
      void Show() { cout<<a<<endl; }
      };
      void g_fun(CExamplec)
      {
      cout<<"g_func"<<endl;
      }
      int main()
      {
      CExample A(100);
      CExample B=A;
      B.Show();
      g_fun(A);
      return 0;
      }

       

      运行结果:

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      调用g_fun()时,会产生以下几个重要步骤:

      (1).A对象传入形参时,会先会产生一个临时变量,假设为:A_TEMP。

      (2).然后调用拷贝构造函数把A的值给A_TEMP。整个这两个步骤等于:

      CExample A_TEMP(A);

      (3).等g_fun()执行完后, 析构掉 C 对象。  

      2-2.函数的返回值是类的对象

       

      #include<iostream>
      using namespace std;
      class CExample
      {
      private:
      int a;
      public:
      //构造函数
      CExample(int b) { a=b; printf("constructoris called\n"); }
      //拷贝构造函数
      CExample(const CExample & c) { a=c.a; printf("copyconstructor is called\n"); }
      //析构函数
      ~CExample() { cout<<"destructor is called\n"; }
      voidShow() { cout<<a<<endl;}
      };
      CExample g_fun()
      {
      CExampleA(0);
      returnA;
      }
      int main()
      {
      g_fun();
      return0;
      }

       

      执行结果如下:

      C++拷贝构造函数(深拷贝,浅拷贝)详解

       

      当g_Fun()函数执行到return时,会产生以下几个重要步骤:

      (1). 先会产生一个临时变量,假定A_Temp。

      (2). 然后调用拷贝构造函数把A的值给A_Temp。整个这两个步骤等于:

      CExample A_Temp(A);

      (3). 在函数执行到最后先析构A_Temp局部变量。

      (4). 等g_fun()执行完后再析构掉A对象。  

      2-3.对象需要通过另外一个对象进行初始化

       

      CExample A(100);
      CExample B=A;

       

      3.浅拷贝与深拷贝

      3-1.默认拷贝构造函数

            很多时候在我们都不知道拷贝构造函数的情况下,传递对象给函数参数或者函数返回对象都能很好的进行,这是因为编译器会给我们自动产生一个拷贝构造函数,这就是“默认拷贝构造函数”,这个构造函数很简单,仅仅使用“老对象”的数据成员的值对“新对象”的数据成员一一进行赋值,它一般具有以下形式:

       

      Rect::Rect(const Rect& r)
      {
      width=r.width;
      height=r.height;
      }

       

            当然,以上代码不用我们编写,编译器会为我们自动生成。但是如果认为这样就可以解决对象的复制问题,那就错了,让我们来考虑以下一段代码:

       

      #include<iostream>
      using namespace std;
      class Rect
      {
      public:
      Rect() { count++; }
      ~Rect() { count--; }
      static int getCount(){return count; }
      private:
      int width;
      int height;
      static int count;
      };
      int Rect::count=0;
      int main()
      {
      Rect rect1;
      cout<<"Thecount of Rect:"<<Rect::getCount()<<endl;
      Rect rect2(rect1);
      cout<<"Thecount of Rect:"<<Rect::getCount()<<endl;
      return 0;
      }

       

            这段代码对前面的类,加入了一个静态成员,目的是进行计数。在主函数中,首先创建对象rect1,输出此时的对象个数,然后使用rect1复制出对象rect2,再输出此时的对象个数,按照理解,此时应该有两个对象存在,但实际程序运行时,输出的都是1,反应出只有1个对象。此外,在销毁对象时,由于会调用销毁两个对象,类的析构函数会调用两次,此时的计数器将变为负数。

            导致计数器为负数的原因是:拷贝构造函数没有处理静态数据成员。

            出现这些问题最根本就在于在复制对象时,计数器没有递增,我们重新编写拷贝构造函数,如下:

       

      #include<iostream>
      using namespace std;
      class Rect
      {
      public:
      Rect() { count++; }
      Rect(const Rect& r)
      {
      width=r.width;
      height=r.height;
      count++;
      }
      ~Rect() { count--; }
      static int getCount(){ return count;}
      private:
      int width;
      int height;
      static int count;
      };
      int Rect::count=0;
      int main()
      {
      Rect rect1;
      cout<<"The count ofRect:"<<Rect::getCount()<<endl;
      Rect rect2(rect1);
      cout<<"The count ofRect:"<<Rect::getCount()<<endl;
      return 0;
      }

       

      3-2.浅拷贝

         所谓浅拷贝,指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。大多情况下“浅拷贝”已经能很好地工作了,但是一旦对象存在了动态成员,那么浅拷贝就会出问题了,让我们考虑如下一段代码:

       

      #include<iostream>
      #include<assert.h>
      using namespace std;
      class Rect
      {
      public:
      Rect() { p=new int(100); }
      ~Rect() { assert(p!=NULL); delete p; }
      private:
      int width;
      int height;
      int *p;
      };
      int main()
      {
      Rect rect1;
      Rect rect2(rect1);
      return 0;
      }

       

            在这段代码运行结束之前,会出现一个运行错误。原因就在于在进行对象复制时,对于动态分配的内容没有进行正确的操作。我们来分析一下:

            在运行定义rect1对象后,由于在构造函数中有一个动态分配的语句,因此执行后的内存情况大致如下:

      C++拷贝构造函数(深拷贝,浅拷贝)详解

        在使用rect1复制rect2时,由于执行的是浅拷贝,只是将成员的值进行赋值,这时rect1.p=rect2.p,也即这两个指针指向了堆里的同一个空间,如下图所示:

      C++拷贝构造函数(深拷贝,浅拷贝)详解

       

            当然,这不是我们所期望的结果,在销毁对象时,两个对象的析构函数将对同一个内存空间释放两次,这就是错误出现的原因。我们需要的不是两个p有相同的值,而是两个p指向的空间有相同的值,解决办法就是使用“深拷贝”。

      3-3.深拷贝

            在“深拷贝”的情况下,对于对象中动态成员,就不能仅仅简单地赋值了,而应该重新动态分配空间,如上面的例子就应该按照如下的方式进行处理:

       

      #include<iostream>
      #include<assert.h>
      using namespace std;
      class Rect
      {
      public:
      Rect() { p=new int(100);}
      Rect(const Rect& r) {
      width=r.width;
      height=r.height;
      p=new int(100);
      *p=*(r.p);
      }
      ~Rect() { assert(p!=NULL); deletep; }
      private:
      int width;
      int height;
      int *p;
      };
      int main()
      {
      Rectrect1;
      Rectrect2(rect1);
      return0;
      }

       

        此时,在完成对象的复制后,内存的一个大致情况如下:

      C++拷贝构造函数(深拷贝,浅拷贝)详解

        此时rect1的p和rect2的p各自指向一段内存空间,但它们指向的空间具有相同的内容,这就是所谓的“深拷贝”。

       

      3-4.防止默认拷贝发生

       

          通过对对象复制的分析,我们发现对象的复制大多在进行“值传递”时发生,这里有一个小技巧可以防止按值传递——声明一个私有拷贝构造函数。甚至不必去定义这个拷贝构造函数,这样因为拷贝构造函数是私有的,如果用户试图按值传递或函数返回该类对象,将得到一个编译错误,从而可以避免按值传递或返回对象。

       

      //防止按值传递
      class CExample
      {
      private:
      int a;
      public:
      //构造函数
      CExample(int b) { a = b; cout<<"creat: "<<a<<endl; }
      private:
      //拷贝构造函数,只是声明
      CExample(const CExample& C);
      public:
      ~CExample() { cout<< "delete: "<<a<<endl; }
      void Show () { cout<<a<<endl; }
      };
      void g_Fun(CExample C)
      {
      cout<<"test"<<endl;
      }
      int main()
      {
      CExample test(1);
      //g_Fun(test); //按值传递将出错

      return 0;
      }

       

      小结:拷贝有两种:深拷贝,浅拷贝。

           当出现类的等号赋值时,会调用拷贝函数,在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以,这时,必须采用深拷贝。

          深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。简而言之,当数据成员中有指针时,必须要用深拷贝。

      4.拷贝构造函数的几个细节

      4-1.为什么拷贝构造函数必须是引用传递,不能是值传递?

            简单的回答是为了防止递归引用。具体一些可以这么讲:

            当 一个对象需要以值方式传递时,编译器会生成代码调用它的拷贝构造函数以生成一个复本。如果类A的拷贝构造函数是以值方式传递一个类A对象作为参数的话,当 需要调用类A的拷贝构造函数时,需要以值方式传进一个A的对象作为实参; 而以值方式传递需要调用类A的拷贝构造函数;结果就是调用类A的拷贝构造函数导 致又一次调用类A的拷贝构造函数,这就是一个无限递归。

      4-2.拷贝构造函数的作用。

            作用就是用来复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实例。

      4-3.参数传递过程到底发生了什么?

            将地址传递和值传递统一起来,归根结底还是传递的是"值"(地址也是值,只不过通过它可以找到另一个值)!

           值传递:对于内置数据类型的传递时,直接赋值拷贝给形参(注意形参是函数内局部变量);对于类类型的传递时,需要首先调用该类的拷贝构造函数来初始化形参(局部对象);如void foo(class_type obj_local){}, 如果调用foo(obj);  首先class_type obj_local(obj) ,这样就定义了局部变量obj_local供函数内部使用

            引用传递:无论对内置类型还是类类型,传递引用或指针最终都是传递的地址值!而地址总是指针类型(属于简单类型), 显然参数传递时,按简单类型的赋值拷贝,而不会有拷贝构造函数的调用(对于类类型)。

      4-4. 在类中有指针数据成员时,拷贝构造函数的使用?

              如果不显式声明拷贝构造函数的时候,编译器也会生成一个默认的拷贝构造函数,而且在一般的情况下运行的也很好。但是在遇到类有指针数据成员时就出现问题 了:因为默认的拷贝构造函数是按成员拷贝构造,这导致了两个不同的指针(如ptr1=ptr2)指向了相同的内存。当一个实例销毁时,调用析构函数 free(ptr1)释放了这段内存,那么剩下的一个实例的指针ptr2就无效了,在被销毁的时候free(ptr2)就会出现错误了, 这相当于重复释放一块内存两次。这种情况必须显式声明并实现自己的拷贝构造函数,来为新的实例的指针分配新的内存。

      4-5.拷贝构造函数里能调用private成员变量吗?

            解答:这个问题是在网上见的,当时一下子有点晕。其时从名子我们就知道拷贝构造函数其时就是一个特殊的构造函数,操作的还是自己类的成员变量,所以不受private的限制。

      4-6.以下函数哪个是拷贝构造函数,为什么?

       

      X::X(const X&);   //拷贝构造函数
      X::X(X); X::X(X&, int a=1); //拷贝构造函数
      X::X(X&, int a=1, int b=2); //拷贝构造函数

       

         解答:对于一个类X, 如果一个构造函数的第一个参数是下列之一:

            X&     const X&    volatile X&    const volatile X&

      且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构造函数.

      4-7.一个类中可以存在多于一个的拷贝构造函数吗?

            解答:类中可以存在超过一个拷贝构造函数。

       

      class X { 

      public:
      X(const X&); // const 的拷贝构造
      X(X&); // 非const的拷贝构造
      };

       

            注意:

            如果一个类中只存在一个参数为 X& 的拷贝构造函数,那么就不能使用const X或volatile X的对象实行拷贝初始化;

            如果一个类中没有定义拷贝构造函数,那么编译器会自动产生一个默认的拷贝构造函数;

            这个默认的参数可能为 X::X(const X&)或 X::X(X&),由编译器根据上下文决定选择哪一个。

      5.C++构造函数以及析构函数的若干面试问题

      Q1:构造函数能否重载,析构函数能否重载,为什么?

            A1:构造函数可以,析构函数不可以。

      Q2:析构函数为什么一般情况下要声明为虚函数?

            A2:虚函数是实现多态的基础,当我们通过基类的指针是析构子类对象时候,如果不定义成虚函数,那只调用基类的析构函数,子类的析构函数将不会被调用。如果定义为虚函数,则子类父类的析构函数都会被调用。

      Q3:什么情况下必须定义拷贝构造函数?

            A3:当类的对象用于函数值传递时(值参数,返回类对象),拷贝构造函数会被调用。如果对象复制并非简单的值拷贝,那就必须定义拷贝构造函数。例如大的堆栈数据拷贝。如果定义了拷贝构造函数,那也必须重载赋值操作符。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/hongpangzi/5224751,作者:长沙红胖子Qt,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:Qt开发技术:Qt富文本(一)富文本介绍、文档结构

      下一篇:Qt+ECharts开发笔记(二):Qt窗口动态调整大小,使ECharts跟随Qt窗口大小变换而变换大小

      相关文章

      2025-05-19 09:04:44

      js小题2:构造函数介绍与普通函数对比

      js小题2:构造函数介绍与普通函数对比

      2025-05-19 09:04:44
      new , 关键字 , 函数 , 对象 , 构造函数
      2025-05-14 10:03:05

      C++ 11新特性之语法甜点1

      C++ 11新特性之语法甜点1

      2025-05-14 10:03:05
      函数 , 初始化 , 序列 , 引入 , 构造函数 , 语法
      2025-05-14 10:03:05

      C++ 11新特性之语法甜点2

      C++ 11新特性之语法甜点2

      2025-05-14 10:03:05
      函数 , 初始化 , 基类 , 构造函数 , 编译器 , 语法
      2025-05-14 10:03:05

      C++ 11新特性之右值引用

      C++ 11中引入了一项关键特性——右值引用,极大地增强了C++在资源管理、性能优化和表达力方面的能力。通过理解并合理运用右值引用,我们可以编写出更高效、更简洁且不易出错的代码。

      2025-05-14 10:03:05
      右值 , 对象 , 常量 , 引用 , 构造函数 , 绑定
      2025-05-09 08:50:35

      C++11:特殊类设计和四种类型转换

      拷贝只会放生在两个场景中:拷贝构造函数以及赋值运算符重载,因此想要让一个类禁止拷贝,只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。

      2025-05-09 08:50:35
      函数 , 对象 , 指针 , 构造函数 , 类型 , 类型转换
      2025-05-09 08:20:32

      C++:类与对象(2)

      C++:类与对象(2)                                                      

      2025-05-09 08:20:32
      函数 , 拷贝 , 构造函数 , 类型 , 编译器 , 运算符 , 重载
      2025-05-09 08:20:32

      STL:Vector的模拟实现

      STL:Vector的模拟实现

      2025-05-09 08:20:32
      memcpy , pos , vector , 失效 , 扩容 , 拷贝 , 迭代
      2025-05-08 09:03:29

      Java序列化有什么作用

      对java对象进行序列化之后,会变成字节码,这样就会比较方便在网络上进行传输,也可以在磁盘上进行存储。

      2025-05-08 09:03:29
      对象 , 序列化 , 接口 , 构造函数
      2025-05-07 09:12:52

      C语言:内存函数

      C语言:内存函数

      2025-05-07 09:12:52
      memcpy , memmove , 内存 , 函数 , 字节 , 拷贝 , 重叠
      2025-05-07 09:08:42

      C++Lambda表达式

      C++Lambda表达式

      2025-05-07 09:08:42
      C++ , 形参 , 捕获 , 类型 , 闭包
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5247819

      查看更多

      最新文章

      C++ 11新特性之语法甜点2

      2025-05-14 10:03:05

      C++ 11新特性之语法甜点1

      2025-05-14 10:03:05

      C++ 11新特性之右值引用

      2025-05-14 10:03:05

      C++11:特殊类设计和四种类型转换

      2025-05-09 08:50:35

      C++:类与对象(2)

      2025-05-09 08:20:32

      Java序列化有什么作用

      2025-05-08 09:03:29

      查看更多

      热门文章

      C++最普通的定时器功能实现

      2023-03-08 10:27:24

      C/C++泛型编程实现数据结构之栈

      2023-05-15 10:00:33

      C++生成指定范围内随机数封装

      2023-02-07 10:34:04

      C++中substr函数的用法

      2023-04-18 14:14:13

      C++入门篇之C++ 指针

      2023-03-14 11:26:53

      C++ 浮点数之间比较

      2023-03-10 10:11:44

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      C++快速笔记 2.数据类型

      【C++】初始化函数列表和构造函数内赋值的区别

      vs2008中常见错误解决方法汇总

      【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数

      OTL C++库 访问Oracle数据库

      Python基础教程(第3版)中文版 第9章 魔法方法、特性和迭代器(笔记)

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号