初始化是一个非常重要的语言特性,最常见的就是对对象进行初始化。在传统 C++ 中,不同的对象有着不同的初始化方法,例如普通数组、POD (plain old data,没有构造、析构和虚函数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类对象的初始化,要么需要通过拷贝构造、要么就需要使用 () 进行。这些不同方法都针对各自对象。在传统C++中可以使用初始化列表如下:

#include<bits/stdc++.h>
using namespace std; class A{
public:
int a, b, c;
};
int main(){
int arr[4] = {1, 2 ,3 ,4}; // 数组初始化
A a = A{1,2,3}; // 传统类列表初始化
return 0;
}

为了解决这个问题,C++11 首先把初始化列表的概念绑定到了类型上,并将其称之为 initializer_list,允许构造函数或其他函数像参数一样使用初始化列表,这就为类对象的初始化与普通数组和 POD 的初始化方法提供了统一的桥梁。可以缉拿个类模板initializer_list作为构造函数的参数,则初始化列表就智能用于构造该函数。值得注意的是列表中的元素必须是5同一种类型或者可以转化为同一种类型。STL中提供了initializer_list作为参数构造函数,考虑vector的下列实例:

vector<int> a1(10);         // 定义了大小为10未初始化的int型向量
vector<int> a2{10}; // 使用initializer-list初始化,a2只有一个元素初始化为10
vector<int> a3{1, 2, 3}; // 使用initializer-list初始化,a3有三个元素1,2,3

偷文件initializer_list提供了对类模板initializer_list的支持。该类中包含成员函数begin()和end()可以获得列表范围。除了用于构造函数外,initilazer_list还可以作为常规函数的参数。下面编写一个函数sum来求和,演示该模板类作为函数参数的使用。

#include<iostream>
#include<initializer_list>
using namespace std; double sum(initializer_list<double> L){
double tol = 0.0;
for(auto p = L.begin(); p != L.end(); p++){
tol += *p;
}
return tol;
} int main(){
double tol = sum({1.0, 2, 3, 4.5});
cout << tol <<endl;
return 0;
}

最新文章

  1. numpy 函数一:linspace
  2. android 解决ListView点击与滑动事件冲突
  3. AngularJs自定义指令--执行顺序 (原文:http://www.cnblogs.com/sagacite/p/4624227.html)
  4. CSS的一些简单概念
  5. Kinect2在线重建(Tracking and Mapping)
  6. Visual Studio: Show Solution Platform in Toolbar
  7. ThinkPHP 3.2.3 自动加载公共函数文件的方法
  8. HttpConnection方式访问网络
  9. java 复习
  10. 关于Linux系统和Windows系统中文件夹的命名规范
  11. Eclipse配置安卓开发环境(解决SDK manager下载慢问题)
  12. CSS实现半透明的方法
  13. sticker.js贴纸效果
  14. CentOS mini版安装后增加gcc编译环境
  15. C# 中的Async 和 Await 的用法详解
  16. leetcode26: 删除排序数组中的重复项
  17. loadtxt函数
  18. 如何快速学好Shell脚本? 转
  19. istringstream、ostringstream、stringstream 类介绍 和 stringstream类 clear函数的真正用途
  20. Unity[C#] Reflection Use

热门文章

  1. 02-更改窗口的根控制器 Demo示例程序源代码
  2. bzoj 2190 线性生成欧拉函数表
  3. bzoj 2243 树链剖分
  4. Python与金融分析基础
  5. hrtimer的简单使用 + 原理和实现【转】
  6. 【bzoj3924&amp;&amp;luogu3345】幻想乡战略游戏
  7. PC机做ISCSI存储服务器故障
  8. Newtonsoft.Json 序列化和反序列化 以及时间格式
  9. Java基础:异常机制
  10. dart Stream