1.c++中初始化列表和构造函数初始化的区别是什么?2.类的成员变量的初始化顺序是按照声明顺序吗?

初始化列表和构造函数初始化的区别是什么?

初始化和赋值对内置类型的成员没有太大的区别,在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的。只有一些需要注意的事项

初始化列表一般情况如下:
 Date(int year, int month, int day)        : _year(year)        , _month(month)        , _day(day) 
构造函数初始化一般通过构造函数实现,示例:
#include<iostream>
using namespace std;
class Date
{
public:
	Date(int year, int month, int day) {
		this->_day = day;
		this->_month = month;
		this->_year = year;
	}

private:
	int _year;
	int _month;
	int _day;
};

上面的构造函数(使用初始化列表的构造函数)显示地初始化类的成员,
而没有使用初始化列表的构造函数是对类的成员赋值,并没有进行显示的初始化。

注意事项

1. 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
2. 类中包含以下成员,必须放在初始化列表位置进行初始化:
  1. 引用成员变量

  2. const成员变量

  3. 类类型成员(该类没有默认构造函数)

    #include

    using namespace std;

    class Date
    {
    public:
    Date(int year, int month, int day) {
    this->_day = day;
    this->_month = month;
    this->_year = year;
    }

    private:
    int _year;
    int _month;
    int _day;

     int & _ref;//引用
     const int xxxxx;//const成员变量
     Date _lei;//类类型成员
    

    };

在这里插入图片描述

3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使 用初始化列表初始化

哪怕自己没有初始化列表,编译器自己会加初始化列表,效率会高一些。

4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关

尽量不要使用成员初始化成员

类的成员变量的初始化顺序是按照声明顺序吗

在c++中,类的成员变量的初始化顺序只与变量在类中的声明顺序有关,与在构造函数中的初始化顺序无关,而且静态成员变量先于实例变量,父类成员变量先于子类成员变量父类析构函数先于子类构造函数

class Test{
public:
	Test(){

	};
	Test::Test()n2(2), n1(1)
private:
	int n1;
	int n2;

};

成员变量的初始化次序跟变量在内存中的次序有关,而内存中的排列顺序早在编译期就根据变量的定义决定了
从全局看,变量的初始化顺序如下:

  1. 基类的静态变量或全局变量
  2. 派生类的静态变量或全局变量
  3. 基类的成员变量
  4. 派生类的成员变量
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值