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.mzph.cn/news/217822.shtml

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

相关文章

TiDB 7.5 LTS 发版丨提升规模化场景下关键应用的稳定性和成本的灵活性

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/1cffec89 互联网时代&#xff0c;数据的迅猛增长给数据库带来了可扩展性的挑战&#xff0c;Gen AI 带来的数据暴增更加剧了这种挑战。传统的数据分片已经不能承载新时代数据暴增的需求&#xf…

UE4 Niagara学习笔记

需要在其他发射器的同一个粒子位置发射其他粒子就用Spawn Particles from other Emitter 把发射器名字填上去即可 这里Move to Nearest Distance Field Subface GPU&#xff0c;可以将生成的Niagara附着到最近的物体上 使用场景就是做的火苗附着到物体上

【每日一题】2697. 字典序最小回文串-2023.12.13

题目&#xff1a; 2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行…

Python和Beautiful Soup爬虫助力提取文本内容

大家好&#xff0c;网络爬虫是一项非常抢手的技能&#xff0c;收集、分析和清洗数据是数据科学项目中最重要的部分。今天介绍如何从链接中爬取高质量文本内容&#xff0c;我们使用迭代&#xff0c;从大约700个链接中进行网络爬取。如果想直接跳转到代码部分&#xff0c;可以在下…

Java版本+鸿鹄企业电子招投标系统源代码+支持二开+Spring cloud +鸿鹄电子招投标系统

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。为了符合国家电子招投标法律法规及相关规范&#xff0c;…

2697. 字典序最小回文串(2023-12-13)

力扣每日一题 题目&#xff1a;2697. 字典序最小回文串 日期&#xff1a;2023-12-13 用时&#xff1a;4 m 53 s 时间&#xff1a;7ms 内存&#xff1a;43.61MB 代码&#xff1a; class Solution {public String makeSmallestPalindrome(String s) {char[] chs s.toCharArray…

基于SpringBoot的在线考试系统

基于SpringBoot的在线考试系统 文章目录 基于SpringBoot的在线考试系统 一.引言二.系统设计三.技术架构四.系统功能模块设计五.功能实现六.源码获取 一.引言 在线考试系统是一种基于互联网技术的教育辅助工具&#xff0c;它通过利用SpringBoot框架的优势&#xff0c;实现了高效…

c语言注册登录+实验室物帐管理系统

实验室物帐管理系统&#xff1a;用户手册 1引言 本用户手册旨在为实验室物帐管理系统的使用提供指导和帮助。该系统旨在实现以下功能&#xff1a;仪器设备条目的输入、仪器设备的借还以及库存情况查询及修改。通过本手册&#xff0c;您将了解到如何正确使用该系统&#xff0c…

创建全0或全1矩阵numpy.matlib.zeros()numpy.matlib.ones()

【小白从小学Python、C、Java】 【计算机等级考试500强证书考研】 【Python-数据分析】 创建全0或全1矩阵 numpy.matlib.zeros() numpy.matlib.ones() 选择题 请问执行np.matlib.zeros((2,2))的结果是&#xff1a; import numpy.matlib import numpy as np print("【执行】…

图片压缩软件4K Image Compressor Pro mac特点介绍

4K Image Compressor Pro mac是一款专业的图片压缩软件&#xff0c;它可以在不损失图像质量的前提下&#xff0c;优化图片文件的大小&#xff0c;从而节省存储空间&#xff0c;方便在社交媒体上共享图片&#xff0c;并优化网站加载速度。 4K Image Compressor Pro mac软件特点 …

Go语言文件操作:文件读写案例以及相关细节介绍

文章目录 介绍一、打开文件1.1 以只读的方式打开文件1.2 自定义的方式打开文件 二、文件读写代码案例2.1 从磁盘读取数据2.2 向磁盘写数据 介绍 对文件进行操作时&#xff0c;其中最基本的操作就是"读写"。本文将介绍Go语言中文件读写的案例和相关细节。在Go语言中&…

Onlyoffice本地部署超详细教程(附协作空间2.0新资讯)

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;ONLYOFFICE相信大家已经有所了解&#xff0c;本篇讲一下o…

2023全国职业院校技能大赛信息安全管理与评估正式赛(模块三CTF)

全国职业院校技能大赛高等职业教育组信息安全管理与评估 \任务书\ 模块三 网络安全渗透、理论技能与职业素养 极安云科专注技能竞赛&#xff0c;包含网络建设与运维和信息安全管理与评估两大赛项&#xff0c;及各大CTF&#xff0c;基于两大赛项提供全面的系统性培训&#xf…

算法 - 二分搜索法 / 二分法(704)

原理&#xff1a; 利用数组的有序性&#xff0c;每次取查找范围的中间点&#xff0c;缩窄一半的查找空间。比较中间值和目标值的大小&#xff0c;直到找到目标值或者查找区间为空时返回。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目&…

C++STL的list模拟实现

文章目录 前言 list实现push_back迭代器(重点)普通迭代器const迭代器 inserterase析构函数构造函数拷贝构造赋值 vector和list的区别 前言 要实现STL的list, 首先我们还得看一下list的源码。 我们看到这么一个东西&#xff0c;我们知道C兼容C&#xff0c;可以用struct来创建一…

保姆级:Windows Server 2012上安装.NET Framework 3.5

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Windows》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…

什么是产品经理 | 文末赠书

目录 一. 产品经理是什么&#xff1f;二. 产品经理需要具备的技能三. 产品经理的职责四. 产品经理在软件开发过程中如何平衡不同利益方的需求&#xff1f;五. 入门建议六. 发展前景七. 总结&#x1f981;文末福利图书介绍作者简介 一. 产品经理是什么&#xff1f; 产品经理是指…

四、mapbox搭载vue3测试demo(31-40)

demo地址https://bidding-m.gitee.io/mapbox-test/#/ 31、[添加] 热力图图层 32、[添加] 样式聚类 33、[添加] HTML聚类 34、[添加] 点动画效果 35、[添加] marker动

探索SSL证书的应用场景,远不止网站,还有小程序、App Store等

说到SSL证书&#xff0c;我们都知道其是用于实现HTTPS加密保障数据安全的重要工具&#xff0c;在建设网站的时候经常会部署SSL证书。但实际上&#xff0c;SSL证书的应用场景远不止网站&#xff0c;它还被广泛地应用到小程序、App Store、抖音广告、邮件服务器以及各种物联网设备…

用户管理第2节课 -- idea 2023.2 创建表

一、懂得 1.1编码格式是防止乱码的&#xff0c;utf-8是完全够的&#xff0c;那几个基本没差别 网址&#xff1a; 【IDEA——连接MySQL数据库&#xff0c;创建库和表】_idea中数据库-CSDN博客 这些是MySQL数据库中的一些术语&#xff0c;可以简单解释如下&#xff1a; 1、col…