初始化列表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;
}

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

相关文章
|
3月前
变量不初始化
变量不初始化。
26 0
|
8月前
|
Android开发 C++
C++使用初始化列表的方式来初始化字段
C++使用初始化列表的方式来初始化字段
43 0
|
16天前
|
编译器 C++ 容器
【C++11(一)】右值引用以及列表初始化
【C++11(一)】右值引用以及列表初始化
|
3月前
|
编译器 C++
【c++】构造函数赋值方式(初始化列表)
【c++】构造函数赋值方式(初始化列表)
|
4月前
|
C语言
C11中类成员变量定义时初始化问题
C11中类成员变量定义时初始化问题
29 0
|
4月前
|
存储 安全 编译器
C++11(列表初始化,声明,范围for)
C++11(列表初始化,声明,范围for)
20 0
|
7月前
声明数组和初始化数组
声明数组和初始化数组。
24 0
指针的介绍,定义,初始化
每个变量都有自己的地址,地址也是数据,就用地址类型的变量来装,地址类型就叫做指针类型,即指针类型定义的变量就是专门装地址的。
113 0
|
Java 测试技术
成员变量初始化的问题
成员变量初始化的问题
|
编译器 C++
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)
朋友们好啊,今天终于更新了。我是柠檬叶子C,本章将继续讲解C++中的面向对象的知识点,本篇主要讲解默认成员函数中的构造函数、析构函数和拷贝构造函数。还是和以前一样,我们将由浅入深地去讲解,以 "初学者" 的角度去探索式地学习。会一步步地推进讲解,而不是直接把枯燥的知识点倒出来,应该会有不错的阅读体验。如果觉得不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!Thanks ♪ (・ω・)ノ
103 0
【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数(一)