灵活而奇特的C++语言特性——统一初始化
学习了博主的《漫谈继承技术》系列博文之后,相信大家都有所收获吧!这次博主将和大家一起探讨 《灵活而奇特的C++语言特性》 ,主要包括引用、常量(const)、常量表达式(constexpr)、静态(static)、外部(expert)、类型定义(typedef)、类型别名(aliases)、类型转换、作用域解析、统一初始化、显示转换运算符、特性(attribute)、用户自定义文本、头文件、可变长度参数列表和预处理器宏。尽管这个知识清单显得有点凌乱,但是这些话题都是博主经过精心挑选,是容易混淆的语言特性。本篇我们来学习一下统一初始化和初始化列表(initializer_list)的观念以及使用场景,增进大家对《灵活而奇特的C++语言特性》的理解。
统一初始化
在C++11之前,初始化类型学并非总是统一的。自C++11,引入了初始化列表(initializer_list),可以使用统一的方式来初始化。统一初始化并不局限于结构和类,它还可以用于初始化C++中的任何类型。举个栗子吧。
#include<iostream>
#include<initializer_list>
usingnamespacestd;
classDemo
{
public:
Demo(charcValue =' ', intnValue = 0);
virtual~Demo(){}
voidshow() const;
private:
charm_cValue;
intm_nValue;
};
Demo::Demo(charcValue/*= ' '*/,int nValue/*= 0*/)
:m_cValue(cValue), m_nValue(nValue)
{
}
voidDemo::show()const
{
cout<<"m_cValue: "<< m_cValue << endl;
cout<<"m_nValue: "<< m_nValue << endl;
}
int main(intargc,char**argv)
{
//使用初始化列表初始化对象
Demo myDemo1('c', 12);
Demo myDemo2({ 'd', 15 });
Demo myDemo3 = { 'f',20 };
Demo myDemo4{ 'g', 34 };
//输出对象数据成员值
myDemo1.show();
myDemo2.show();
myDemo3.show();
myDemo4.show();
//统一初始化并不局限于结构和类,它还可以用于初始化C++中的任何类型
intnValue1 = 10;
intnValue2(20);
intnValue3 = { 30 };
intnValue4 { 40 };
return0;
}
程序运行结果:
统一初始化的其他用法:
①可以用于把变量初始化为0,只需指定一些列空括号就可以。
②可以阻止窄化(narrowing)。注意,C++是隐式地执行窄化的。
③可以用来初始化动态非配的数组。
④可以在构造函数初始化器中初始化类成员数组。
⑤简化了参数数量可变函数的编写
初始化列表的确是一个比较好用的东西,博主列举了其中一些比较常用的特性供大家学习,希望对大家了解初始化列表有一点帮助。下面咱们举个栗子来用用初始化列表的这些特性吧。
#include<iostream>
#include<initializer_list>
usingnamespacestd;
//初始化列表简化了参数数量可变函数的编写
int Sum(initializer_list<int>list)
{
intresult = 0;
//用for each累加列表中的值
foreach(constint&varin list)
{
result+= var;
}
returnresult;
}
int main(intargc,char**argv)
{
//初始化列表可以用于把变量初始化为0
intnValue{};
cout<<"nValue: "<< nValue << endl;
//初始化列表可以阻止窄化(narrowing)。注意,C++是隐式地执行窄化的
intnValue1 = 1.56;//C++是隐式地执行窄化的
//intnValue2{2.89};//error,初始化列表可以阻止窄化(narrowing)
//初始化列表可以用来初始化动态非配的数组
constintsize = 5;
int*nPVArray = new int[size]{1,2, 3, 4, 5};
delete[]nPVArray;
nPVArray =nullptr;
//调用基于initializer_list编写的参数数量可变的函数
intresult = Sum({0, 1, 2, 3, 4, 5, 6, 7, 8 ,9});
cout<<"result: "<< result << endl;
//Sum({1, 2, 2.89 });//error,初始化列表可以阻止窄化(narrowing)
return0;
}
程序运行结果:
如果将上面代码中的注释去掉,编译会报以下错误:
经过本篇博文的学习,相信大家已经理解了统一初始化的概念,掌握了初始化列表(initializer_list)的用法,熟悉了统一初始化的使用场景。当别人再提起初始化列表的概念时,不至于一脸懵逼。好啦,那咱们今天的学习就到这里了。
如果想了解更多关于C++语言特性相关的知识,请关注博主《灵活而奇特的C++语言特性》系列博文,相信你能够在那里寻找到更多有助你快速成长和加深你对C++语言特性相关的知识和一些特性的理解和掌握。当然,如果你想了解关于继承方面的技术,请关注博主《漫谈继承技术》系列博文。
灵活而奇特的C++语言特性——统一初始化相关推荐
- 灵活而奇特的C++语言特性——const(一)
学习了博主的<漫谈继承技术>系列博文之后,相信大家都有所收获吧!这次博主将和大家一起探讨 <灵活而奇特的C++语言特性> ,主要包括引用.常量(const).常量表达式(con ...
- 灵活而奇特的C++语言特性——typedef aliases
学习了博主的<漫谈继承技术>系列博文之后,相信大家都有所收获吧!这次博主将和大家一起探讨 <灵活而奇特的C++语言特性> ,主要包括引用.常量(const).常量表达式(con ...
- # Python3 面试试题--Python语言特性
Python语言特性 1 Python的函数参数传递 看两个例子: a = 1 def fun(a):a = 2 fun(a) print(a) # 1 a = [] def fun(a):a.app ...
- 语言特性与API设计
我平时的主要工作之一,便是编写一些基础及通用的类库,能够在项目中大量复用.换句话说,我的工作目的,是让其他开发人员可以更好地完成工作.因此,如何设计更容易使用的API是我经常要考虑的东西,偶尔也会有一 ...
- 总结Python的几点语言特性
总结Python的几点语言特性 Python语言简洁,优雅,扩展性强...... 这些特点常被Python程序员挂在嘴边,确实也都是Python的特点. 要讨论语言的特点或特性,可以得到很多不同的结论 ...
- c 11 主要的新语言特性,C 11系列
什么是C++0x? C++0x是C++最新标准标准化过程中的曾用名,在这一系列文章中我们将介绍最新标准添加的一系列新的语言特性.在2011年9月份,C++0x正式由官方发布并命名C++11,现在很多编 ...
- Python语言特性和优缺点及什么是鸭子类型?
1)Python语言特性? Python是静态还是动态类型?是强类型还是弱类型? Python是动态强类型语言(不少人误以为是弱类型) 动态还是静态指的是编译期还是运行期确定类型 强类 ...
- 一本深入探讨C++11~C++17最新语言特性的书推荐给你
近10年来C++的更新可谓是非常频繁,这让我在2017年时感受到了一丝不安.那个时候我发现在开源平台上已经有很多项目采用C++11和C++14标准编写,其中不乏一些知名的代码库,而公司里所用的编译环境 ...
- AI算法工程师 | 02人工智能基础-Python基础(二)语言特性_控制语句_切片_数据类型
文章目录 Python基础语法 一.Python语言特性 使用Jupyter Notebook Python是强类型的动态脚本语言 Python中一切皆对象 二.流程控制语句 条件判断语句 循环语句 ...
最新文章
- SpringMVC解决静态资源不能访问
- 100%移植阿里云移动测试技术,竟仅需1周?! ——移动测试专有云(1)
- 350个特性看透ES6
- [LeetCode] Add Two Numbers
- Windows 7安装Virtual Server 2005 R2 SP1
- IP Scanner Pro for mac(局域网IP扫描软件)
- Windows服务器双网卡冲突
- 介绍identity matrices
- 九型人格:三、The proformer 实干者 - 我若没有成就,就没有人会爱我。
- 【已解决】python 使用xlrd,xlwt 修改execl单元格的背景色
- 鸿蒙OS应用(HarmonyOS Application)开发常见示例源码
- Java语言概述以及环境搭建
- 图像处理_ISP_坏点矫正
- mysql几种性能测试的工具使用
- pyside6 - 简单了解
- 在PCB中快速找到原理图的原件
- Unity AssetBundle一个需要注意的地方
- 南开大学计算机考研难不难,南开大学考研难吗?一般要什么水平才可以进入?...
- 60条令你大吃一惊的小常识
- 有没有关于python的壁纸_Python 实战之精美壁纸下载