ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cpp拾遗——构造

2022-05-10 23:02:16  阅读:172  来源: 互联网

标签:调用 int 构造 拾遗 对象 匿名 cpp 构造函数


1. 构造

构造函数的调用

T t(1,2);     // 调用 T(int ,int)
T t2 = (1,2); // 调用 T(int)
T t3 = 1;     // 调用 T(int)
T t3 = T(1);  // 调用 T(int) 构造匿名对象,并将 匿名对象 和符号 t3绑定
T t4 = t3;    // 调用 T(T&)
T t5(t4);     // 调用 T(T&)

void func(T t);
func(t5);     // 调用 T(T&) 构造形参t

class T {
public:
   T(int a); // 当定义了构造函数,编译器就不提供构造函数
}
T a; // 所以这里错误

1.1 构造函数初始化列表

组合对象,可能需要初始化列表

class A{
public:
   A(int a);
}
class B {
public:
   B(int a, int b);
   A m_a;
}

B(1,2); // 这里会报错,由于构造B 时,会先构造A,但是无法调用A的有参构造。
// 所以必须改成
class B{
public:
  B(int a, int b) : m_a2(a), m_a(b) {}
  A m_a;
  A m_a2;
}

组合对象的构造顺序和定义顺序有关,和初始化列表顺序无关。
析构顺序和构造顺序相反

若类有const属性,则必须用参数化列表进行初始化。

2. 匿名对象

函数返回对象时,会构造一个匿名对象,匿名对象释放被析构,取决于是否又符号去接。

T f() {
   T a;
   return a;  // 调用 T(T&) 构造匿名对象
}

T t1 = f(); // 匿名对象又符号接,所以不会被析构
T t2;
t2 = f();  // 匿名对象没符号接,会被析构

标签:调用,int,构造,拾遗,对象,匿名,cpp,构造函数
来源: https://www.cnblogs.com/yangxinrui/p/16255826.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有