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

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

相关文章
|
存储 缓存 安全
【服务器开发系列】订单号生成策略
订单是整个电子商务的核心,整个电子商务的流程也是围绕订单展开的;本文与大家分享一下各大电子商务网站订单号的生成方式。
1203 0
|
4月前
|
存储 弹性计算 大数据
阿里云服务器38元、99元、199元特惠详细配置、适用场景及购买条件介绍
阿里云特惠云服务器全解析:入门款:轻量应用服务器(2核2G200M带宽+40G ESSD盘)38元/年,日均0.1元。进阶款:经济型e实例(2核2G3M带宽+40G ESSD Entry盘)99元/年,续费同价。性能款:通用算力型u1实例(2核4G5M带宽+80G ESSD Entry盘)199元/年,企业独享,续费同价。三款配置覆盖个人建站、中小企业应用及轻量级企业服务,通过大数据精选用户常用配置,实现价格与性能的精准匹配。本文将详细解析这些阿里云服务器的配置、价格、限购条件以及购买指南,帮助大家更好地了解和选择适合自己的云服务器。
|
编译器 C语言 C++
C++一分钟之-C++11新特性:初始化列表
【6月更文挑战第21天】C++11的初始化列表增强语言表现力,简化对象构造,特别是在处理容器和数组时。它允许直接初始化成员变量,提升代码清晰度和性能。使用时要注意无默认构造函数可能导致编译错误,成员初始化顺序应与声明顺序一致,且在重载构造函数时避免歧义。利用编译器警告能帮助避免陷阱。初始化列表是高效编程的关键,但需谨慎使用。
226 2
|
Web App开发 JavaScript 前端开发
XSS利器之BeEF
XSS利器之BeEF
|
前端开发 JavaScript Java
实现基于WebSocket的实时消息推送
实现基于WebSocket的实时消息推送
|
算法 安全 编译器
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
【C++ 17 新特性 折叠表达式 fold expressions】理解学习 C++ 17 折叠表达式 的用法
410 2
|
C# 开发者 Windows
WPF/C#:ProgressBar的基本使用
WPF/C#:ProgressBar的基本使用
248 0
|
文字识别 Python
Halcon 学习笔记五:几何定位+仿射变换+测量
Halcon 学习笔记五:几何定位+仿射变换+测量
1699 0
|
Python
【Numpy】实现0变1和1变0即取反操作
【Numpy】实现0变1和1变0即取反操作
313 0
|
C++ 编译器
C++ - 虚基类、虚函数与纯虚函数
虚基类       在说明其作用前先看一段代码 class A{public:    int iValue;};class B:public A{public:    void bPrintf(){cout
2950 0