美文网首页
C++的初始化列表和列表初始化

C++的初始化列表和列表初始化

作者: 突击手平头哥 | 来源:发表于2021-02-10 22:47 被阅读0次

C++的初始化列表和列表初始化

初始化列表

初始化列表是声明在构造函数中来实现的,相当于初始化,而不是复制操作

初始化列表示例

class Test_A{
public:
    Test_A(): a(0) {

    }

private:
    int a;
};

  如代码中,跟随在构造函数声明冒号后的即是

初始化列表的好处

初始化列表是由其必要性的,比如const变量、引用、禁止复制构造函数的类、没有默认构造函数的类

  • 避免调用多次构造函数

列表初始化

C语言中直接使用{}定义且赋值的操作其实就可以称之为列表初始化

对象初始化

对象初始化比较复杂,涉及到很多的构造函数;这里只关注于使用列表这样的初始化方式

struct Test_ST_A {
    int  num;
    char *ptr;
    float fnum;
};
class Test_Class_A {
public:
    //virtual ~Test_Class_A() {};
    //Test_Class_A() {};
    int  num;
    char *ptr;
    float fnum;
private:
    //Test_Class_A(const Test_Class_A &) {};
};

int main() {
    Test_ST_A st_a = { 0, NULL, 1.1};

    Test_Class_A cla_a = { 0, NULL, 1.1};
    return 0;
}

  在C++中是可以直接使用{}包含多个参数直接对内部数据进行初始化的,并且这些参数的类型是可以不一致的;同时如果定义了构造函数、虚函数之类的则无法再这样初始化了,必须定义符合一致的Test_Class_A(int, const char* , float) {};构造函数方可。这就是列表初始化,调用的是构造函数哟

initializer_list

这个类主要是针对于容器来的,对于容器来说也应当想C语言中数组一样提供类似的初始化、赋值函数

int main() {
    std::vector<int> v = {1, 2, 3};
    return 0;
}

  这里可以当作简单的语法糖,但是当我们期望传入一个{}(<brace-enclosed initializer list>)来初始化一个类内部的vector该如何呢?

class Test_Class_A {
public:
    //virtual ~Test_Class_A() {};
    Test_Class_A(std::initializer_list<int> l): data(l) {
        
    };
    std::vector<int> data;
};

int main() {
    Test_Class_A tca = { 1, 2, 3};
    return 0;
}

  写到这里,感觉到C++这样的语言期望能实现很多非常优良的特性,很多时候为了某一个点就需要引入一个新的概念,比如remove_referenceinitializer_list、左值引用;和C语言的"精简"已经渐行渐远了

相关文章

  • C++的初始化列表和列表初始化

    C++的初始化列表和列表初始化 初始化列表 初始化列表是声明在构造函数中来实现的,相当于初始化,而不是复制操作 初...

  • [C++之旅] 11 初始化列表

    [C++之旅] 11 初始化列表 初始化列表的特性 初始化列表先于构造函数执行 初始化列表只能用于构造函数 初始化...

  • C++初始化列表

    引言 用c++的人都知道,c++的构造函数具有初始化列表,初始化列表有什么作用?什么情况下必须使用初始化列表...

  • c++11新特性之列表初始化

    C++11新增了列表初始化的概念。 在C++11中可以直接在变量名后面加上初始化列表来进行对象的初始化。 列表初始...

  • C++11——变量和基础类型

    列表初始化(List Initialization) 当初始化列表与内置类型的变量一起使用时,这种初始化形式具有一...

  • C++初始化列表 多态

    初始化列表 特点 一种便捷的初始化成员变量的方式 只能在构造函数中 初始化列表与默认参数配合使用 如果函数的声明和...

  • C++初始化列表

    本文主要说明成员初始化列表的注意事项。 I、上帝视角看初始化列表 构造函数可以有两种构造形式,一是在构造函数体内对...

  • c++ 初始化列表

    初始化列表可以改变private里const 的值

  • C++11中的初始化列表

    1 初始化列表 C++98/03中可以使用初始化列表对普通数组、POD类型等进行初始化。如: 但是这种初始化方式的...

  • 2020-09-15 构造函数初始化列表

    使用初始化列表的构造函数,其显式地对成员进行初始化 未使用初始化列表的构造函数,其通过赋值来对成员进行初始化(此赋...

网友评论

      本文标题:C++的初始化列表和列表初始化

      本文链接:https://www.haomeiwen.com/subject/qxhlxltx.html