初始化列表vs列表初始化

简介: 初始化列表vs列表初始化

这两个概念如此相似,以至于很多时候都在混用。

初始化列表是构造函数的周边概念,表示在执行构造函数中,先执行初始化列表,再执行函数体内的语句。

构造函数的编写尽量采用初始化列表的方式,特别是类中有自定义类出现的时候。而且有些情况,必须采用初始化列表才能初始化成员变量,如类中有引用类型,类中有const成员变量时等。

class myclass
{
public:
    myclass(int a, int b, int c):m_a(a),m_b(b),m_c(c)
    {
        std::cout << "construct function called!" << std::endl;
    }
private:
    int m_a;
    const int m_b;
    int &m_c;
};

列表初始化是c++11为了统一内置变量,结构,类型的初始化方式的一种尝试,即使用者可以采用花括号{}来初始化这些变量。

为什么所有类型都可以采用列表来初始化变量?那是因为c++11引入了initializer_list这个类模板。如何使用这个类模板?这里提供一个案例。

#include <iostream>
#include <initializer_list>
class myclass
{
public:
    myclass(int a,int b)
    {
        std::cout << a << "---" << b << std::endl;        
    }
    myclass(std::initializer_list<int> il)
    {
        for(auto &i : il){
            std::cout << i << std::endl;
        }
    }
};
int main()
{
    myclass aa(1,2);
    myclass bb{3,4,5};
    return 0;
}

即可以作为函数参数,这里作为构造函数的参数,也可以用作类成员函数,或普通函数的参数。那么声明对象的时候必须采用花括号初始化对象,而这样的好处是可以不用指定参数个数,当然它的主要用途是用来支持泛型编程。

相关文章
|
7月前
|
C语言 C++
结构体变量的初始化和引用
结构体变量的初始化和引用
71 1
|
7月前
|
存储
关于结构体变量的初始化和引用
在编程中,结构体是一种复合数据类型,它允许我们将多个不同类型的数据项组合成一个单一的数据结构。通过定义结构体,我们可以创建具有多个属性的数据类型,以更好地组织和处理复杂的数据。本文将介绍结构体变量的初始化和引用方法,并附上相应的代码示例
66 1
|
Android开发 C++
C++使用初始化列表的方式来初始化字段
C++使用初始化列表的方式来初始化字段
62 0
|
5月前
变量不初始化
【7月更文挑战第2天】变量不初始化。
39 0
|
7月前
|
编译器 C++ 容器
【C++11(一)】右值引用以及列表初始化
【C++11(一)】右值引用以及列表初始化
|
7月前
|
编译器 C++
【c++】构造函数赋值方式(初始化列表)
【c++】构造函数赋值方式(初始化列表)
|
7月前
|
存储 安全 编译器
C++11(列表初始化,声明,范围for)
C++11(列表初始化,声明,范围for)
59 0
|
7月前
|
C语言
C11中类成员变量定义时初始化问题
C11中类成员变量定义时初始化问题
72 0
|
C语言
变量初始化和不初始化
变量初始化和不初始化。
149 1
声明数组和初始化数组
声明数组和初始化数组。
44 0