C++11 的新特性4——列表的初始化

本文介绍了C++STL中的初始化列表,包括其在std::initializer_list中的使用,支持任意长度的初始化,以及在std::vector、结构体、类对象和基本数据类型的多种应用场景,强调了其方便性和避免类型窄化的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  STL(standard template libraray 标准模板库)使用过程中可以发现它的初始化列表可以是任意长度。直接在变量名之后用花括号进行数据初始化

    std::initializer_list<std::string>

事例代码1

void Log(std::initializer_list<std::string> list)
{
    for (auto ite=list.begin();ite!=list.end();ite++)
    {
        std::cout<<*ite<<" ";
    }
    std::cout<<std::endl;
}

//调用接口,实现多个参数的创建
//可变长度参数

 Log({"dfs","gfbg","fdgb"});

事例代码2:

struct InitExc {
    std::vector<int> data;
   InitExc(std::initializer_list<int> list) {
        for (auto iter = list.begin(); iter != list.end(); ++iter) {
            data.push_back(*iter);
        }
    }
};

 列表初始化:

列表初始化:
    std::initializer_list<std::string>
        C++11扩大了初始化列表的适用范围,使其可用于所有内置类型和用户定义的类型
        得益于此,列表初始化时,不限定个数

优点:

  1. 方便,且基本上可以替代括号初始化
  2. 可以使用初始化列表接受任意长度
  3. 可以防止类型窄化,避免精度丢失的隐式类型转换

多种实现方式 

1、花括号进行初始化

std::vector<int> v{1,2,3};

2、函数返回值,作为初始化内容

// 函数返回值,作为初始化内容
std::vector<int> func()
{
    return {1,2,3};
}
 std::vector<int> v = func();

3、普通数据类型

int C_init{10};

int C_init = 10;         //3种方式等价

int C_init2 = {10};    

std::cout<<C_init<<" "<<C_init2<<std::endl;

又如:

    char ch={'d'};

    char ch2 = 'a';

    char ch3{'a'};

    std::cout<<ch<<ch2<<ch3<<std::endl;

4、类对象的初始化

class A
{
private:
     
public:
    A(int)
    {
        std::cout<<"构造函数"<<std::endl;
    }
    ~A(){}
};

//类对象的初始化
A Class_init1{11};
A Class_init2(12);
A Class_init3 = {13};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值