C++—初始化列表

    xiaoxiao2021-03-25  117

    初始化列表

                                                                                             

    对类的初始化有2种方法,一种是在构造函数中一次定义,另外一种就是初始化列表。 2种方法总的来说还是,初始化列表较为高 效,而且有3种情况必须放在初始化列表中 分别为:

    •  常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面

    •  引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 •  没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化, 而是直接调用拷贝构造函数初始化。 下来看看初始化列表的例子: # define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<windows.h> using namespace std; class Time { public: Time() { cout << "Time()" << endl; _hour = 0; _minute = 0; _second = 0; } Time(const Time& t) { cout << "Time (const Time& t)" << endl; _hour = t._hour; _minute = t._minute; _second = t._second; } private: int _hour; int _minute; int _second; }; class Date { public: //EXP1 Date(int year, int month, int day,Time& t) { cout << "Date()- 非初始化列表 " << endl; _year = year; _month = month; _day = day; _t = t; } //EXP2 Date(int year, int month, int day, Time& t) : _year(year) , _month(month) , _day(day) , _t(t) { cout << "Date ()- 初始化列表 " << endl; } private: int _year; // 年 int _month; // 月 int _day; // 日 Time _t; // 时间 }; void Test() { Time t1; Date d1(2015, 4, 29, t1); } int main() { Test(); system("pause"); return 0; } 现在上面Date类有2个构造函数分别是EXP1和EXP2分别让他们运行可以发现都可以让程序跑过去, 初始化列表初始化和普通初始化具有一定的优势的~(这里一定先注释掉另外一个)。 初始化列表和非初始化列表效率是不同的,一般是初始化列表高一点,具体为什么初始化列表的效率高呢? 首先如果你是非初始化列表的步骤是什么? 如果你是一个自定义类型,在参数的时候调用一次构造函数,然后在下面赋值的时候调用 拷贝构造函数,这样就是构造+拷贝构造,而初始化列表是直接把参数附进来也就是一次性的构造就结束了.
    转载请注明原文地址: https://ju.6miu.com/read-11212.html

    最新回复(0)