#include<iostream>#include<initializer_list>#include<vector>usingnamespace std;classInitClass{public:InitClass(initializer_list<int> list){for(int l : list)
initializer_list_.emplace_back(l);}voidPrintInit(){for(int l : initializer_list_)
cout << l << endl;}voidPrint(initializer_list<int> list){for(int l : list)
cout << l << endl;}private:
vector<int> initializer_list_;};struct A {double a;int b;};struct B {B(int a,double b):a_(a),b_(b){}private:int a_;double b_;};intmain(){// 使用初始化列表初始化类对象
InitClass i={1,2,3,4,5};
i.PrintInit();
cout << endl;// 初始化列表做函数参数
i.Print({1,2,3});// 使用初始化列表初始化POD数据
vector<int> v ={1,2,3,4};
A a {1.1,1};
B b {2,2.2};return0;}
变长参数模板(typename… Args)
c++11提供了变长参数模板,堪比黑魔法。可以实现任意类型、任意个数的变长参数模板类和函数。
可以使用经典的递归模板函数的方式去取出变长参数模板函数中的参数,示例代码如下。
#include<iostream>template<typename T>voidprintf(T value){
std::cout << value << std::endl;}template<typename T,typename... Args>voidprintf(T value, Args... args){
std::cout << value << std::endl;printf(args...);}intmain(){printf(1,2,"123",1.1);return0;}