初始化列表

Posted xixixing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始化列表相关的知识,希望对你有一定的参考价值。

初始化列表可以让类的属性带上默认值。

初始化列表只能用于构造函数,即类在实例化时会调用自己的构造函数,初始化列表先于构造函数执,这样对象在创建的时候就有了带默认值的属性。

格式如下图红色部分:赋值必须在()内。

技术图片

初始化列表与在构造函数的{ }里赋值是不同的,

class Base {
public:
    Base(const string& s) : s_(s) {}
    /*
    Base(const string& s) {
        s_ = s; 
    }
    */
private:
    string s_;
};

编译器大概会把以上代码扩张成

Base(const string& s) {
    s_.string::string(s);
}
/*
Base(const string& s) {
    s_.string::string();
    string tmp = string(s); // create temporary object
    s_.string::operator=(tmp);
    tmp.string::~string();
}
*/

所以 被注视掉的写法,多了一次构造函数和析构函数的开销。因此初始化列表的优点:节省开销,更高效。

static类成员永远也不会在类的构造函数初始化。静态成员在程序运行的过程中只被初始化一次,所以每当类的对象创建时都去“初始化”它们没有任何意义。至少这会影响效率:既然是“初始化”,那为什么要去做多次?

【参考】

C++成员初始化列表 的作用

初始化列表的作用

类的初始化列表的必要性

C++之带有默认参数值的构造函数

C++面向对象,类的无参、带参构造函数、拷贝构造函数以及深拷贝和浅拷贝

 

以上是关于初始化列表的主要内容,如果未能解决你的问题,请参考以下文章

未创建 Android listview 内容视图

项目开发收尾总结(片段)

基于时间复杂度的这些片段真的很困惑

如何从片段内的列表视图打开链接网址?

如何使列表视图出现在片段中?

根据字符串名称而不是列表视图项位置替换片段并启动活动