C++ primer plus 第16章string 类和标准模板库, 模板initializer list(C++11)

C++ primer plus 第16章string 类和标准模板库, 模板initializer list(C++11)

C++ primer plus 第16章string 类和标准模板库, 模板initializer list(C++11)


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

16.7.2 模板initializer list(C++11)

模板 imnitializer list是C++11新增的。您可使用初始化列表语法将 STL容器初始化为一系列值:

std::vector<double>payments(45.9939.2319.9589.01};

这将创建一个包含4个元素的容器,并使用列表中的4个值来初始化这些元素。这之所以可行,是因为容器类现在包含将 initializer list作为参数的构造函数。例如,vector包含一个将initializer list作为参数的构造函数,因此上述声明与下面的代码等价:

std::vector<double>payments({
   45.99,39.2319.9589.01});

这里显式地将列表指定为构造函数参数。通常,考虑到 C++11新增的通用初始化语法,可使用表示法行而不是()来调用类构造函数:

shared ptr<double>pd(new double)://ok to use}instead of()

但如果类也有接受 initializer list 作为参数的构造函数,这将带来问题:// ??

std::vector<int>vi 10);

这将调用哪个构造函数呢?

//case A: 10 uninitialized elementsstd::vectorsint> vi(10);std::vector<int>vi((10));//case B:1 element set to 10

答案是,如果类有接受 initializer list作为参数的构造函数,则使用语法{)将调用该构造函数。因此在这个示例中,对应的是情形 B。
所有 imnitializer list 元素的类型都必须相同,但编译器将进行必要的转换:

std::vector<double>payments(45.9939.231989
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值