C++1114新标准——统一初始化(Uniform Initialization)、Initializer_list(初始化列表)、explicit

系列文章目录

C++11&14新标准——Variadic templates(数量不定的模板参数)
C++11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit


文章目录

  • 系列文章目录
    • 1. 统一初始化(Uniform Initialization)
    • 2. Initializer_list(初始化列表)
      • 禁止窄化转换
      • Initializer_list在标准库中的应用
    • 3. explicit


1. 统一初始化(Uniform Initialization)

  在C++11之前有多种初始化方式,包括以下几种:

1.int x1 = 5;
2.int x1(5);
3.int x1{5};
4.int x1 = {5};

  其中1、2为传统初始化语法,3、4为列表初始化,不仅是基本数据类型可以这样初始化,stl容器、自定义类和模板类都可以使用这些方法初始化。C++11之后,更推荐统一使用列表初始化。
  统一初始化的用法是用大括号{ }来进行初始化:

int values[]{1,2,3};vector<int> v{1,2,3};vector<int> v({1,2,3});//这不是统一初始化,而是构造函数接受一个Initializer_list的初始化。
vector<int> v={1,2,3};//这不是统一初始化,而是赋值初始化。
vector<string> n{"1","2","3"};complex<double> c{3.0,4.0};

2. Initializer_list(初始化列表)

  用于构造的大括号其实是一个Initializer_list(初始化列表),其内部包含一个指向array头部的指针和array的长度,所以当使用Initializer list进行拷贝构造时,所指向的是同一个array。array是对数组进行改造而成的新容器,使其符合STL规范。
在这里插入图片描述
一个类可以有两种初始化:直接接受参数初始化或者接受一个Initializer list进行初始化。
在这里插入图片描述

P p(7,5); // 输出:P(int,int),a=7,b=5
P q{7,5}; // 输出:P(Initializer_list<int>), values= 7 5
P r{7,5,3}; // 输出:P(Initializer_list<int>), values= 7 5 3
P s={7,5}; // 输出:P(Initializer_list<int>), values= 7 5

  如果只定义了第一种初始化方式而没有第二种初始化方式,q和s仍然可以编译通过,因为编译器会将初始化列表进行拆解,然后调用第一种初始化方式。但r将无法编译通过,因为编译器将其列表拆解后,与第一种初始化方式的参数数量不符合,无法调用,所以会报错。

  如果只定义了第二种初始化方式而没有第一种初始化方式,则p无法初始化。因为虽然编译器会将初始化列表拆解为一个个的参数,但却不能将一个个的参数合并为一个初始化列表,这不是一个双向的过程!

禁止窄化转换

  在传统的初始化类型当中,允许高精度的数据类型给低精度的数据类型进行赋值,从而实现窄化转换。但统一初始化将不再允许窄化转换。

int a = 3.14; // 正确。a = 3;int a{3.14}; // 错误!统一初始化不可以窄化转换

Initializer_list在标准库中的应用

C++11之后,标准库的容器也可以使用Initializer_list进行操作:
在这里插入图片描述
在这里插入图片描述

3. explicit

  explicit绝大多数情况下,都用在构造函数之前,效果是禁止隐式类型转换。在C++11之前,只能对参数个数为1的构造函数起作用。
在这里插入图片描述
  可以看到,在没加explicit的时候,5将会被隐式转换为Complex(5,0)的一个临时对象,然后再调用operator+进行操作;加上explicit就是阻止了这个隐式操作的过程,继续这样写编译器会报错。
  在C++11之后,explicit可以对多个实参的构造函数禁止隐式类型转换。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/216259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速解决Edge浏览器常见问题:完整教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 一、Edge浏览器是什么&#xff1f; 二、常见的问题 1. DNS服务器出错 解决方案一&#xff1a;清除浏览器缓存和Cookie 2.网络问题 3.缓存和Cook…

网络安全等级保护V2.0测评指标

网络安全等级保护&#xff08;等保V2.0&#xff09;测评指标&#xff1a; 1、物理和环境安全 2、网络和通信安全 3、设备和计算安全 4、应用和数据安全 5、安全策略和管理制度 6、安全管理机构和人员 7、安全建设管理 8、安全运维管理 软件全文档获取&#xff1a;点我获取 1、物…

Spark RDD的转换

按颜色区分转换&#xff1a; 绿色是单 RDD 窄依赖转换黑色是多 RDD 窄依赖转换紫色是 KV 洗牌型转换黄色是重分区转换蓝色是特例的转换 单 RDD 窄依赖转换 MapPartitionRDD 这个 RDD 在第一次分析中已经分析过。简单复述一下&#xff1a; 依赖列表&#xff1a;一个窄依赖&…

【Java 基础】32 定时调度

文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中&#xff0c;定时任务是一种常见的需求&#xff0c;用于周期性地执…

Java - Spring中Bean的循环依赖问题

什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你&#xff0c;你也依赖我。 比如&#xff1a;丈夫类Husband&#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…

【知识分享】Java用poi实现excel导出图片并浮在单元格上方

当使用Java导出Excel并将图片放置在单元格上时&#xff0c;可以使用Apache POI库来实现。以下是一个简单的示例代码&#xff1a; package org.example.demo2;import com.aliyun.core.utils.IOUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermod…

用23种设计模式打造一个cocos creator的游戏框架----(八)适配器模式

1、模式标准 模式名称&#xff1a;适配器模式 模式分类&#xff1a;结构型 模式意图&#xff1a;适配器模式的意图是将一个类的接口转换成客户端期望的另一个接口。适配器模式使原本接口不兼容的类可以一起工作。 结构图&#xff1a; 适用于&#xff1a; 系统需要使用现有的…

centos7 docker Mysql8 搭建主从

Mysql8 搭建主从 docker的安装docker-compose的安装安装mysql配置主从在master配置在slave中配置在master中创建同步用户在slave中连接 测试连接测试配置测试数据同步遇到的问题id重复错误执行事务出错&#xff0c;跳过错误my.cnf 不删除多余配置的错误可能用到的命令 docker的…

IOS添加三方库冲突了

1 duplicate symbol for architecture arm64 改为 在Build Settings->Other link flags中添加-dead_strip&#xff0c;如果Other link flags中有-all_load与-force_load则删掉&#xff0c;只填-dead_strip

倒计时4天|谈思AutoSec智能汽车安全攻防实训课程火热报名中~

车联网技术是国内外的研究热点问题。车联网技术与传统汽车行业深度融合&#xff0c;促进了自动驾驶技术在多种智能场景下的部署与应用。然而&#xff0c;车联网技术智能化、共享化、网联化发展的同时也带来了不可避免的安全问题&#xff0c;如硬件安全、数据安全、通信安全、云…

前端:如何让background背景图片进行CSS自适应

在设置login背景时&#xff0c;找到了一张这样的图片&#xff1a; 但是设置成login背景时&#xff0c;如果没有做一些css适应设置&#xff0c;图片就变样了&#xff0c;变成了这样&#xff1a; 严重变形了&#xff0c;这就造成了一种理想与现实的差距。 若想解决这个自适应问题…

JavaScript实现飘窗功能

实现飘窗功能很简单 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…

遗留系统现代化:7步入门数字化转型

遗留系统对企业来说可能是一把双刃剑。虽然它们曾经对企业很有帮助&#xff0c;但随着时间的推移&#xff0c;这些应用程序、系统和架构变得过时&#xff0c;最终会限制企业发展。 为了实现保持竞争优势所需的扩展、业务敏捷性和数字化转型&#xff0c;越来越多企业意识到需要…

低压无功补偿在分布式光伏现场中的应用

摘要&#xff1a;分布式光伏电站由于建设时间短、技术成熟、收益明显而发展迅速&#xff0c;但光伏并网引起用户功率因数异常的问题也逐渐凸显。针对分布式光伏电站接入配电网后功率因数降低的问题&#xff0c;本文分析了低压无功补偿装置补偿失效的原因&#xff0c;并提出了一…

【BigDecimal类—常用API系列】解决java浮点计算精度损失问题

文章目录 Java浮点计算精度损失问题BigDecimal进行精确运算的解决方案 Java浮点计算精度损失问题 BigDecimal它是干什么用的呢&#xff1f;什么是java浮点计算精度损失问题&#xff1f;我们先看一段代码&#xff0c;看这个代码有什么问题&#xff1f;再说BigDeimal这个类是干什…

Java:TCP 通信方法(基本发送 + 接收)并 实现文件传输且反馈

TCP 通信编程 TCP:是一种可靠的网络协议&#xff0c;再通信两端都建立一个Socket对象。 通信之前要保证连接已经建立。 通过Socket产生IO流进行通信。 创建对象时&#xff0c;会连接服务器&#xff0c;连接不上&#xff0c;会报错。 所以&#xff0c;先运行服务端&#xff0c;再…

【C语言】数据在内存中的存储

目录 练笔 整型数据的存储&#xff1a; char 型数据——最简单的整型 整型提升&#xff1a; 推广到其他整形&#xff1a; 大小端&#xff1a; 浮点型数据的存储&#xff1a; 存储格式&#xff1a; 本篇详细介绍 整型数据&#xff0c;浮点型数据 在计算机中是如何储存的。…

基于SSM的小儿肺炎知识管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

深度学习之网络优化与正则化

视频链接&#xff1a;7.1 神经网络优化的特点_哔哩哔哩_bilibili 神经网络优化的特点 网络优化的难点 &#xff08;1&#xff09;网络结构差异大&#xff1a;不同模型之间的结构差异大——没有通用的优化算法、超参数多 &#xff08;2&#xff09;非凸优化问题&#xff1a;…

maui sqlite开发一个商城加购物车的演示(3)

购物车界面及代码 <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:syncfusion"clr-namesp…