initializer_list介绍

模板initializer_list是C++11新增的,可以使用初始化列表语法将STL容器初始化为一系列值,在使用 { }来进行初始化的时候,其实是调用了将 initializer_list < T > 作为参数的构造函数。

使用列表初始化可以让容器如同数组一般被初始化,除此以外,实现以std::initializer_list为形参
的构造函数也非常容易,这使自定义容器支持列表初始化也变得十分简单。

可变参数模板参数展开方法

递归的展开方法

要定义递归开始函数和结束函数,比较繁琐

void print(){}
template<typename T>
void print(T t)
{cout << t << endl;
}
template<typename T, typename... Args>
void print(T t, Args... args)
{print(t);print(args...);
}
int main() {print(1);print(1, 2);print(1, 2, 3);
}

使用initializer_list 配合 lambda和逗号表达式展开


template<typename... Args>
void print(Args... args)
{std::initializer_list<int>{([&]{cout << args
<< endl; }(), 0)...};
}

使用初始化列表需要注意的事项

如果有一个类同时拥有满足列表初始化的构造函数,且其中一个是以 std::initializer_list 为参数,那么编译器将优先以 std::initializer_ list 为参数构造函数。例如:

std::map<std:: string, int> x8{ {"bear",4},{"cassowary",2}, {"tiger",7} }

内层括号和外层括号使用的构造函数是不一样的,内层的 {“bear”,4} 等隐式调用的是 std::pair(const T1& x, const T2& y) 构造函数,而外层调用的是std::map的构造函数 map(std::initializer_list<value_ type>init, const Allocator&)

指定初始化

struct Point3D {int x;int y;int z;
};
Point3D p{ .z = 3 }; // x = 0, y = 0

C++之initializer_list,可变参数模板参数展开方法相关推荐

  1. C++可变参数模板的展开方式

    文章目录 前言 可变参数模板的定义 参数包的展开 递归函数方式展开 逗号表达式展开 enable_if方式展开 折叠表达式展开(c++17) 总结 前言 可变参数模板(variadic templat ...

  2. 【C++】C++11新特性——可变参数模板|function|bind

    文章目录 一.可变参数模板 1.1 可变参数的函数模板 1.2 递归函数方式展开参数包 1.3 逗号表达式展开参数包 1.4 empalce相关接口函数 二.包装器function 2.1 funct ...

  3. C++_可变参数模板到emplace_back再到construct再到forward

    C++_可变参数模板到emplace_back再到construct再到forward 1.可变参数模板 具体定义如下图所示: 编写一个可变参数版本: 1.1sizeof-运算符 2.emplace_ ...

  4. 可变参数模板、右值引用带来的移动语义完美转发、lambda表达式的理解

    可变参数模板 可变参数模板对参数进行了高度泛化,可以表示任意数目.任意类型的参数: 语法为:在class或者typename后面带上省略号. Template<class ... T> v ...

  5. 可变参数模板(参考《C++ Templates 英文版第二版》)

    可变参数模板(参考<C++ Templates 英文版第二版>) Chapter 4 可变参数模板 自从C++11,模板可以接受可变数量的参数 4.1 可变参数模板 可以定义模板,去接受无 ...

  6. C++11 -------- 类的新功能+可变参数模板+emplace接口

    目录 类的新功能 1.默认成员函数 (1)八个默认成员函数 (2)默认移动构造和移动赋值的生成条件 (3)默认生成的移动构造和移动赋值会做什么 (4)验证默认生成的移动构造和移动赋值所做的工作 2.类 ...

  7. 3.4 参数展开-机器学习笔记-斯坦福吴恩达教授

    参数展开(Unrolling Parameters) 在神经网络的学习过程中,我们的工作对象面临的是一些矩阵: Θ(1),Θ(2),Θ(3),...Θ^{(1)},Θ^{(2)},Θ^{(3)},.. ...

  8. C++ Variadic Templates(可变参数模板)

    本文参考侯捷老师的视频:https://www.youtube.com/watch?v=TJIb9TGfDIw&list=PL-X74YXt4LVYo_bk-jHMV5T3LHRYRbZoH ...

  9. C++ 0x 使用可变参数模板类 实现 C# 的委托机制

    1 #ifndef _ZTC_DELEGATE_H_ 2 #define _ZTC_DELEGATE_H_ 3 4 #include <vector> 5 #include <fun ...

最新文章

  1. 大数据引发的风险与管控
  2. Android应用的基本组件介绍
  3. linux调用odbc接口乱码,linux中pypyodbc读取GB编码mdb中文乱码解决办法
  4. iOS开发Cocoapods执行命令pod setup,执行失败解决RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
  5. IK和pinyin分词器
  6. 电脑如何设置u盘启动,u盘启动项设置方法
  7. 文字检测识别系统SDK
  8. The captain题目回顾
  9. Flixel横板游戏制作教程(五)— Enemies
  10. 抖音收购musical.ly后,最难过的为什么是快手?
  11. js 实现网页内容语音朗读功能
  12. sgu207:Robbers(贪心)
  13. 空间数据挖掘中的Skyline查询
  14. Intellij IDEA2019版激活方式
  15. 最小编辑距离 (MED)实现-Python
  16. 初识项目与项目管理-1
  17. 华钜同创:亚马逊滞销产品快速清仓的方法!
  18. 云平台车载终端开发项目日志
  19. pytorch earlystopping使用
  20. 【转】区块链公链的 3 大性能难点、5 大体验障碍

热门文章

  1. Android 内存优化——常见内存泄露及优化方案
  2. 布局文件之间含有相同的id的控件
  3. 计算机社团评优申报资料,优秀学生社团申报表 优秀社团申报材料
  4. WPF入门0:WPF的基础知识
  5. 小心!如果遇到这些情况,你的流量可能被“劫持”了!
  6. 基于VGG的猫狗识别
  7. Elasticsearch 可视化界面工具
  8. 可以将图片格式转换成CAD格式图纸吗?
  9. 大数据技术——销售分析系统
  10. 想要申请PhD,真是路漫漫啊