C++ 2.0新特性——大括号与小括号

变量创建区分() 和 {}

1、大括号初始化可以应用的语境最为宽泛,可以阻止隐式窄化类型转换,若大括号内的表达式无法保证能够采用进行初始化的对象来表达,则代码无法编译通过。免疫C++的解析语法:任何能够解析为声明的都要解析为声明。

double  x,y,z;
int sum1{x+y+z};//double 类型的和无法用int表达int sum2(x+y+z);
int sum3=x+y+z;//都没问题,值由double隐式转化为int
Widget w1(10); //调用Widget的构造函数,传入参数10//当试图调用Widget的无参构造函数时,结果就声明成了一个函数
//解析语法
Widget w2()//声明了一个函数名为w2,返回Widget类型对象的函数Widget w3{} //调用无参构造函数

2、在构造函数重载决议期间,只要有任何可能,大括号初始化物就会与带有initializer_list类型的形参匹配,即使其他形参有貌似更匹配的形参表。

正常情况下:

class Widget {public:Widget(int i, bool b) { cout << "调用第一个构造函数" << endl; }Widget(int i, double d) { cout << "调用第二个构造函数" << endl; }
};int main()
{Widget w1(10, true);//第一个Widget w2{ 10,true };//第一个Widget w3(10, 5.0);//第二个Widget w4{ 10,5.0 };//第二个return 0;
}


加了带有initializer_list类型的形参之后:

class Widget {public:Widget(int i, bool b) { cout << "调用第一个构造函数" << endl; }Widget(int i, double d) { cout << "调用第二个构造函数" << endl; }Widget(initializer_list<long double> ld) { cout << "调用initializer_list构造函数" << endl; }
};
int main()
{Widget w1(10, true);Widget w2{ 10,true };//10和true都被强制转化为long doubleWidget w3(10, 5.0);Widget w4{ 10,5.0 };//10和5.0都被强制转化为long doublereturn 0;
}


当找不到办法将大括号的实参转化为initializer_list的类型时,则退而求其次找到普通的重载函数。改成Widget(initializer_list ld) 时,结果和正常情况下的结果一致。

3、使用两个实参来创建vector对象时,小括号和大括号的结果大相径庭。

vector v1(10,20);
//调用了形参中没有任何一个具备initializer_list类型的构造函数。结果是创建了一个含有20个元素的vector容器,所有元素的值为10.

vector v2{10,20};
//调用了形参中含有initializer_list类型的构造函数。结果是创建了含有2个元素的vector容器,值为10,20.

C++ 2.0新特性——大括号与小括号相关推荐

  1. 侯捷C++八部曲笔记(四、C++2.0新特性)

    侯捷C++八部曲笔记(四.C++2.0新特性) 关键字 noexcept override final decltype =default, =delete nullptr auto explicit ...

  2. Redis 6.0 新特性-多线程连环13问!

    来自:码大叔 导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有 ...

  3. Hadoop2.0新特性

    Hadoop2.0的改进 不断完善的Hadoop生态系统 Hadoop2.0新特性之HDFS HA HDFS1.0存在单点故障问题,第二名称节点无法解决此问题 所以提出了HDFS HA(High Av ...

  4. Redis 6.0 新特性,多线程连环 13 问!

    导读:支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后性能提升效果如何?线程数量该如何设置?开启多线程后会不会有线程安全问题? ...

  5. [翻译] C# 8.0 新特性

    原文: Building C# 8.0 [译注:原文主标题如此,但内容大部分为新特性介绍,所以意译标题为 "C# 8.0 新特性"] C# 的下一个主要版本是 8.0.我们已经为它 ...

  6. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总

    Android 5.0新特性有哪些?经过一段时间曝光与测试后,期待已久的Android L系统正式发布了,新一代安卓系统正式名称为Android 5.0 Lollipop(棒棒糖).Android 5 ...

  7. Redis 6.0 新特性:多线程连环 13 问!

    来源 | 码大叔 责编 | Carol 封图 | CSDN付费下载自视觉中国 支持多线程的Redis6.0版本于2020-05-02终于发布了,为什么Redis忽然要支持多线程?如何开启多线程?开启后 ...

  8. C# 3.0 新特性

    http://developer.51cto.com/art/200908/148353.htm 在发布Visual Studio 2005和C#2.0之后,微软公司又马不停蹄的展示了人们所期望的C# ...

  9. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的"多"返回值方法 2. C# 7.0 新特性2: 本 ...

最新文章

  1. 一顿“寄生虫大餐”,或能治好干净引来的免疫病
  2. CV之LabelImg:图片标注工具之LabelImg(图像标注工具)的简介、安装、使用方法详细攻略
  3. UITableView性能优化与卡顿
  4. CharNet算法详解
  5. java 拼图_拼图项目的诅咒:为什么Java 9一遍又一遍地延迟?
  6. 编程语言之问:何时该借用,何时该创造?
  7. R语言 多元方差分析|单因素方差分析
  8. IT十年人生过客-二十九-结婚
  9. vue 中引入阿里云的云盾防水墙
  10. 怎么查看无线路由器连接的设备连接服务器,路由器怎么看几个人连接
  11. VUE实现前台图片 标注(添加矩形框)、放大、缩小、拖拽
  12. 【OpenGL】笔记三、着色器
  13. 无线充电线圈绕制注意事项
  14. Java后端技术框架
  15. 转载: 10+公司SWE/DS offer经验
  16. F - Nastya and Door
  17. gcc-c++安装—使用系统自带的源yum install gcc-c++和本地源进行相应的安装
  18. 湖南省湘潭市谷歌高清卫星地图下载
  19. VR+5G+人工智能=互联网新时代
  20. 疯狂python精讲,00后入门Python的首选!

热门文章

  1. 腾讯云 + Linux
  2. 有什么微软各种服务器,除了Windows操作系统 微软还有什么?
  3. 职称计算机wps模块,2015年职称计算机考试wpsoffice模块图表的创建.doc
  4. 爱奇艺客户端启动优化与实战
  5. 苹果怎么安装未签名的app_苹果签名是什么,怎么使用
  6. 计算机组装有哪些,组装电脑高配置清单有哪些
  7. xilinx sdk格式化代码
  8. react-严格模式
  9. 【iOS高级资深工程师面试篇】①、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 UI部分2/3 -图像显示原理-UI卡顿掉帧
  10. Unity 编辑器扩展总结 一:编辑器开发入门