C++11扩大了用大括号括起的列表(初始化列表)的适用范围,时期可用于所有内置类型和用户定义的类型(即类对象)。使用列表初始化时,可添加=,也可以不添加。例如:

int x={5};
double y {2.75};
short quar [5] {4,5,2,76,1};

另外,列表初始化语法也可以用于new表达式中:

int *ar = new int [4] {6,6,6,6};

创建对象时,也可以使用大括号(而不是圆括号)括起的列表来调用构造函数:

class test{private:int x;int y;int z;public:test(int M,int N,int Q):x(M),y(N),z(Q){};
};test t1{1,2,3};
test t2={2,3,4};//调用的是构造函数

如果有类模板std::initializer_list作为参数的构造函数,则只有该构造函数可以使用列表初始化形式。

第3,4,9,10,16都有讲。

1.2.1、缩窄

初始化列表语法可防止缩窄,即禁止将数值赋给无法存储他的数值变量。常规初始化允许程序员执行可能没有意义的操作,例如:

char c1=11111;//警告
char c2={11111};//错误
char c3={100};//允许

C++11提供了模板类initializer_list,可将其用于构造函数的参数。如果类有接受initializer_list作为参数的构造函数,则初始化列表语法就只能用于该构造函数。列表中的元素必须是同一种类型或可以转换为同一种类型。STL容器提供了initializer_list作为参数的构造函数。示例:

#include "iostream"
#include "stdio.h"
#include "string"
#include "vector"
using namespace std;
int main(int argc,char const *argv[]){vector<int> a1(10);//初始化一个有10个元素,且每个元素为0的数组vector<int> a2{10};//初始化一个有一个元素的数组,元素为10vector<int> a3{4,5,6};//初始化一个有三个元素的数组,元素为4,5,6cout<<"a1.size():"<<a1.size()<<endl;{int i=0;for(int &x:a1){printf("a1[%d]:%d",i,x);i++;}}cout<<"a2.size()"<<a2.size()<<endl;{int i=0;for(int &x:a2){printf("a2[%d]:%d",i,x);i++;}}cout<<"a3.size()"<<a3.size()<<endl;{int i=0;for(int &x:a3){printf("a3[%d]:%d",i,x);i++;}}
}

除了用于构造函数外,还可以将initialzer_list作用于常规函数参数:

例:

#include "iostream"
#include "stdio.h"
#include "string"
#include "initializer_list"
using namespace std;
void test(initializer_list<int> i){int addr=0;for(auto pos=i.begin();pos!=i.end();++pos){cout<<"pos="<<*pos<<endl;//printf("i[%d]:%d",addr,i[addr]);//error ,没有operator[]//addr++;}//cout<<i[0];//error ,没有operator[]
}
int main(int argc,char const *argv[]){test({1,2,3,4,5,6,7,8,9});return 0;
}

C++ ——统一初始化相关推荐

  1. C++11 带来的新特性 (2)—— 统一初始化(Uniform Initialization)

    1 统一初始化(Uniform Initialization) 在C++ 11之前,所有对象的初始化方式是不同的,经常让写代码的我们感到困惑.C++ 11努力创造一个统一的初始化方式. 其语法是使用{ ...

  2. C++11 统一初始化(Uniform Initialization)

    1 统一初始化(Uniform Initialization) 在C++ 11之前,所有对象的初始化方式是不同的,经常让写代码的我们感到困惑.C++ 11努力创造一个统一的初始化方式. 其语法是使用{ ...

  3. 灵活而奇特的C++语言特性——统一初始化

    学习了博主的<漫谈继承技术>系列博文之后,相信大家都有所收获吧!这次博主将和大家一起探讨 <灵活而奇特的C++语言特性> ,主要包括引用.常量(const).常量表达式(con ...

  4. 现代c++之列表初始化/统一初始化

    #include <map> #include <string>class CDemo { public:int x;int y; };int main(void) {int ...

  5. C++11统一初始化形式,使用{}

    //使用vs2013测试代码 class A { public:A(int i, int y){m_a = i;m_b = y;}void show(){cout << m_a <& ...

  6. [C++11]统一的数据初始化方式 - 初始化列表

    关于C++中的变量,数组,对象等都有不同的初始化方法,在这些繁琐的初始化方法中没有任何一种方式适用于所有的情况.为了统一初始化方式,并且让初始化行为具有确定的效果,在C++11中提出了列表初始化的概念 ...

  7. 优达学城《DeepLearning》2-3:权重初始化

    目录 初始重量并观察训练损失 数据集和模型 导入库并加载数据 可视化一些训练数据 定义模型结构 初始化权重 全部为0或1 比较模型行为 均匀分布 统一初始化,基线 设置权重的一般规则 正态分布(Nor ...

  8. 变量之--列表初始化和结构化绑定

    变量之(变长)列表初始化 关键词 std::initializer_list 解释 在 C++98/03 中的对象初始化方法有很多种,这无疑增大了学习难度.这中情况在C++11中终于得到解决. 先看看 ...

  9. java类初始化顺序_Java 类的初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用{}定义,每一次创建对象时执行 执行顺序优先级:静态块,main(),构造块,构造方法 1. 构造函数 publi ...

最新文章

  1. 技术图文:NumPy 的简单入门教程
  2. 华为鸿蒙是多少纳米的,厉害!华为又一颗自研7纳米手机芯片曝光,鸿蒙系统或8月初发布...
  3. 【干货】产品运营中极具战略意义的环节:数据分析
  4. 单核工作法13:永不拖延(下)
  5. WebSphere Application Server v6中的问题诊断以及日志策略
  6. ASP.NET Zero--5.配置权限
  7. 计算机网络基础概念知识笔记
  8. springcloud工作笔记104---Spring中的InitializingBean接口以及afterPropertiesSet的使用
  9. Android测试——如何捕获Windows系统的屏幕输入
  10. 跨域小结(为什么form表单提交没有跨域问题,但ajax提交有跨域问题)
  11. 手把手教你学单片机--51单片机C语言开发
  12. 黑马程序员-java教程 代码笔记
  13. 爱欲与文明(一)快乐原则与现实原则
  14. 极值点、驻点、拐点的区别-----专升本
  15. 【JSON】JSON入门详解(一)
  16. X(解释变量)增加一单位标准差,Y(被解释变量)增加多少标准差?
  17. linux oracle开启监听服务器,linux服务器启动oracle监听端口
  18. php中的or die,php or die() 语句,exit()
  19. 微信小程序商机_盘点微信小程序的八大商机
  20. 一头扎进Shiro-身份认证

热门文章

  1. Firefox Quantum 向左,Google Chrome 向右
  2. 无需写代码的高颜值富集分析神器
  3. 985硕博导师:如果你没空看书,我强烈建议你做这件事
  4. MPB:湖南师大尹佳组-​乳酸菌对酸和胆碱盐的耐受能力
  5. 工作后,拉开你和同龄人差距的,不是出身,不是努力,而是……
  6. matlab cam orbit,如何在MATLAB中平滑旋转3D绘图?
  7. R语言lm函数拟合多项式回归模型、删除数据中的异常样本outlier、之后诊断模型( diagnostics)、使用plot函数打印回归模型的QQ图、残差拟合图、标度-位置图、残差与杠杆关系图
  8. R语言ggplot2可视化通过se参数和level参数设置置信区间的显示与否以及置信区间的范围(95%、90%、50%)
  9. 运维管理工具+chef+puppet+ansible+SaltStack
  10. R使用tsne进行高维数据可视化实战:二维可视化、三维可视化