C++11常用特性介绍——列表初始化
一、列表初始化
1)C++11以前,定义初始化的几种不同形式,如下:
int data = 0; //赋值初始化
int data = {0}; //花括号初始化
int data(0); //构造初始化
2)C++11以旧语法中花括号初始化形式为基础,设计了列表初始化语法,统一了不同的初始化形式
a)数据类型 变量{初始化列表}
//聚合类型
struct Persion
{
char name[64];
struct Date//成员是聚合类型
{
int year;
int month;
int day;
}Age;
};
//
class Student
{
public:
Student(int year,int month,int day) : _year(year),_month(month),_day(day) {}
friend std::ostream& operator << (std::ostream &os, Student const & s)
{
os << s._year << "-" << s._month << "-" << s._day;
}
private:
int _year;
int _month;
int _day;
}
int main()
{
int a{1};
std::cout << a << std::endl;
double b{1.1};
std::cout << b << std::endl;
//聚合类型(任意类型的数组)
int c[]{1,2,3,4,5};
copy(c,c + sizeof(c) / sizeof(c[0]),ostream_iterator<decltype(*c)>(cout, " "));
std::cout << std::endl;
//
Persion persion{"张三",2019,11,14};
std::cout << persion.name << persion.year << persion.day << std::endl;
Student student{2019,11,14};
std::cout << student << std::endl;
}
聚合类型
1)任意类型的数组
2)满足特定条件的类:
a、无自定义的构造函数
b、无私有或保护的非静态成员变量
c、无基类
d、无虚函数
e、无通过“=”或者“{}”丰类声明部分被初始化的非静态成员变量
3)聚合类型的元素或者成员可以是聚合类型也可以是非聚合类型
4)对聚合类型使用列表初始化,相当于用列表初始化的值作为参数,调用相应的构造函数。
b)变长初始化列表:initializer_list
class Num
{
public:
Num(std::initializer_list list)
{
for(auto i : list)
{
_vector.push_back(i);
}
}
friend std::ostream& operator << (std::ostream &os, Num n)
{
//copy(n._vector.begin(),n._vector.end(),ostream_iterator<decltype(n._vector[0]>(os," ");
for(auto i : n_vector)
{
os << i << " " ;
}
return os;
}
private:
std::vector<int> _vector;
}
int main()
{
Num num{1,2,3,4,5,6,7};
std::cout << num << std::endl;
}
initializer_list作为轻量级的列表容器,不但可以用在构造函数中,也可以作为普通函数的参数,传递不定数量的实参,
相对于传统标准容器,效率更高(轻量级列表容器,仅保存初始化列表元素的引用,而非其副本)
最新文章
- css样式之border-radius
- selenium web driver 使用JS修改input属性
- STM32 DMA模块的配置与使用
- sqlhelper sqlparameter 实现增删改查
- IIS6.0启动网站ManagedPipelineHandler异常
- SQL Server:在事务中回滚TRUNCATE操作
- LotusPhp入口文件解析
- js jquery 等的地址
- Azure File文件共享(6):使用Python开发
- Android蓝牙开发深入解析
- 7、树莓派编程;gpio编程;led闪烁
- 关于input的检验问题
- 借助baidu的jsonp接口,做一个自己的候选词组件
- JavaScript的函数声明与函数表达式的区别
- WPF 绘制曲线图
- 被高通收购的CSR是一家怎样的公司
- 前端开发面试题-CSS(转载)
- BUG管理工具——Mantis安装配置
- jsonp小案例
- react 使用map 的时候提示 没有返回值
热门文章
- CMD命令行实现复制一张图片1000份:
- python入门(二十讲):爬虫
- 解决VS2017中出现:This function or variable may be unsafe
- 在VS2017中配置VLD(Visual Leak Detector)内存泄漏检测工具
- JetBrains PyCharm 2018.2.1 x64永久激活码
- UVA 11384 Help is needed for Dexter(递归)
- shell 参数与逻辑结构语句
- javascipt——jQuery
- 删除设备和驱动器中的PPS、百度云、360云盘图标
- 修改环境变量后,导致一些常用命令失效,如ll,ls,vi不能用