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

本文探讨了C++中构造函数初始化列表与构造函数体内赋值在处理成员变量时的区别。静态(const)和引用类型的数据成员必须通过初始化列表进行初始化。此外,构造函数体内赋值会导致额外的开销,效率低于初始化列表,特别是在涉及复杂类时,使用初始化列表能减少不必要的函数调用,提高性能。
摘要由CSDN通过智能技术生成

既然构造函数初始化列表和构造函数体内赋值都可以对成员变量赋值,那么二者有何区别,是不是二者等效呢?
一、若类的数据成员是静态的(const)和引用类型,必需用初始化列表
静态(const)的数据成员只能初始化而不能赋值,同样引用类型也是只可以被初始化,那么只有用初始化列表。
如:

#include <iostream>  
#include <string>  
using namespace std;  
  
template<class t>  
class namedptr {  
public:  
    namedptr(const string& initname, t *initptr);  
private:  
    const string name; //静态数据成员的初始化必需用初始化列表  
    t * const ptr;  
};  
  
  
  
template<class t>  
namedptr<t>::namedptr(const string& initname, t *initptr  )  
: name(initname), ptr(initptr)  
{}  
  
//第二种方法是在构造函数体内赋值:  
  
//template<class t>  
//namedptr<t>::namedptr(const string& initname, t *initptr)  
//{  
//  name = initname;  
//  ptr = initptr;  
//}  
  
  
int main()  
{  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值