c++初始化列表(特点),隐式类型转换(示例,explicit关键字)

目录

初始化列表

定义

特点

必须使用初始化列表的成员变量

初始化顺序

隐式类型转换

示例

explicit关键字


初始化列表

Date::Date(const Date& d) {_year = d._year;_month = d._month;_day = d._day;
}Date::Date(const Date& d) :_year(d._year),_month(d._month),_day(d._day){}

定义

在参数后加冒号,后面跟着以逗号连接的数据成员列表

  • 在成员变量后面的括号内放入要初始化的值

特点

必须使用初始化列表的成员变量

  • const成员变量
  • 引用成员变量
  • 它们都是必须有初始值的变量,因此必须使用初始化列表

每个构造函数都是先走初始化列表,再走{ }内

  • 如果在{ }内使用赋值操作符来初始化const变量或引用变量,就会违反它们不能被修改的要求
  • 因为它们已经被定义,此时再进行赋值相当于对它们进行修改

初始化顺序

与成员变量在类中声明的顺序相同,和在初始化列表的顺序无关

 

隐式类型转换

示例

在进行拷贝时,会先创建一个接收变量类型的临时对象,然后再将临时对象拷贝给接收变量:

编译器会对同一行一个表达式中连续的构造进行优化,使其只进行一次构造:

  • 创建的临时变量具有常性,需要用const对象接收,而不能是普通对象(注意权限不能放大哟):

explicit关键字

C++中的一个关键字,可以用来修饰构造函数禁止隐式转换

class MyClass {
public:explicit MyClass(int x) : m_x(x) {}
private:int m_x;
};void foo(MyClass mc) {// do something with mc
}int main() {MyClass mc1 = 10; // 错误:不能隐式调用构造函数foo(20); // 错误:不能隐式调用构造函数MyClass mc2(30); // 可以显式地调用构造函数foo(mc2); // 可以显式地调用构造函数return 0;
}

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

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

相关文章

Salesforce‘s 爱因斯坦机器人助手引领工业聊天机器人时代

CRM的对话式人工智能助手,根据公司数据提供可靠的人工智能响应及日本工业聊天机器人现状 【前言】 爱因斯坦助手(Einstein Copilot)提供可靠的响应,因为它基于公司独特的数据和元数据,使其能够深入了解公司的业务和客…

第一节 初识Redis

1. 概述 Redis是一个开源的、使用ANSI C语言编写的Key-Value存储系统。Redis的官方名称为Remote Dictionary Server(远程字典服务),它提供了多种语言的API,并且具有高性能、极低延迟和简单性的特点,被广泛用于缓存、会…

linux日志管理之journalctl命令

一、日志查询 1.输出所有日志或按相关要求输出 输出所有日志 #journalctl查看实时日志 #journalctl -f查看最后n行 #journalctl -n 10不分页显示 #journalctl --no-pager适合阅读模式 #journalctl -p 3 -o json-pretty 查看内核日志 #journalctl -k 2.按服务查询 #journal…

前端开发之TCP与UDP

上一篇👉: 前端开发之性能优化 TCP与UDP 三次握手 1. 初始状态: 客户端开始时处于CLOSED状态,表明没有活动的连接。服务器监听特定端口,处于LISTEN状态,等待连接请求。 2. 第一次握手(SYN_SENT状态&am…

LLoCO技术:突破大型语言模型处理长文本的局限

在自然语言处理领域,大型语言模型(LLMs)虽然在众多任务上展现出了卓越的能力,但在处理长文本上下文时却遭遇了瓶颈。由于自注意力机制导致的计算和内存开销随序列长度呈二次方增长,使得这些模型在面对长文本时力不从心…

[Qt的学习日常]--常用控件2

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、widget的…

ALTER TABLE 语句来添加字段或修改列的注释。

在 Apache Flink SQL 中,字段(也称为列)和注释(也称为元数据或描述)的管理通常与 Flink 使用的底层数据源(如 Kafka、JDBC 数据库、Hive 等)紧密相关。Flink SQL 本身不提供直接修改数据源中字段…

《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()

观前提示:函数完整代码在文末,本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法f105时钟树详解图 HAL_RCC_OscConfig() 函数介绍: 此函数是一个用于初始化RCC(Reset and Clock Control)振荡器(Osc…

【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上

【JAVA】SpringBoot skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上 1.下载SkyWalking APM https://skywalking.apache.org/downloads/ jdk8 不支持 SkyWalking APM 9.3.0以上版本,所以这里我们下载 9.3.0版本 2.下载 Java Agent …

MySQL----事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,在学校管理系统中,我们删除一个学生,既需要删除学生的基本资料,也要删除和该学生相关的信息,如班级,考试成绩等等,这样&#…

python基础:字符集和编码

1.字符集 简单来说,字符集就是一套文字符号及其编码的概述。从20世纪60年代美国标准化组织ANSI发布了第一个计算机字符集ASCII开始,为了处理不同的文字,各大计算机公司,各国政府,以及各种标准化组织发明了几百种字符集…

GPT_AI高速发展中什么是Prompt提示词?

提示词(Prompt)是给大语言模型(以下简称模型)的输入文本,用于指定模型应该执行什么样的任务并生成什么样的输出。 提示词发挥了“提示” 模型 应该做什么的作用。设计高质量的提示词需要根据目标任务和模型能力进行精…

Eigen::Isometry3d变换矩阵的常用方法

文章目录 Eigen::Isometry3d变换矩阵的常用方法一、基本定义二、操作方法三、与四元数和平移向量的转换四、左乘与右乘 Eigen::Isometry3d变换矩阵的常用方法 一、基本定义 变换矩阵本质是一个4*4的矩阵 Eigen::Isometry3d T_imu_to_lidar Eigen::Isometry3d::Identity()二、…

分数限制下,选好专业还是选好学校?

1.专业解析 探讨不同专业的优势和未来挑战(课程学习、就业等维度)。结合个人专业选择的经验和思考过程,自定义实际场景并给出不同场景下的“专业VS学校”选择方案。 当探讨不同专业的优势和未来挑战时,需要根据具体的专业领域和市…

手把手教你使用OpenCV和KNN算法进行手写数字识别

手把手教你使用OpenCV和KNN算法进行手写数字识别 在这篇博客中,我将向大家介绍如何使用OpenCV和KNN算法编写一个手写数字识别程序。我们将一步一步地解释每个步骤,确保大家能理解代码的每个细节。我们将通过一个具体的实例来演示,如何从图像…

【Python】 Stacking: 强大的集成学习方法

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 🎵 薛凯琪《找到天使了》 在机器学习中,单…

vscode 终端无法正常执行脚本命令如何解决

我们经常需要在vscode的中安装第三方依赖包,npm是前端目前最大的Node.js模块化管理系统,它能帮助开发者管理和发布Node.js模块。但很多时候我们在vscode的终端中执行npm install命令时经常会报以下错误: 但是在Windows的cmd命令提示符中执行n…

JavaScript妙笔生花:打造沉浸式中国象棋游戏体验

前言 随着信息技术的飞速发展,Web开发领域也出现了翻天覆地的变化。JavaScript作为前端开发中不可或缺的编程语言,其重要性不言而喻。而当我们谈论到利用JavaScript打造一款沉浸式的中国象棋游戏体验时,我们不仅仅是在开发一个游戏&#xff0…

在 Linux/Debian/Ubuntu 上安装 LAMP: Linux、Apache、MySQL 和 PHP

在 Linux/Debian/Ubuntu 上安装 LAMP LAMP 代表 Linux、Apache、MySQL 和 PHP,是一种流行的开源 Web 开发平台,可以提供强大的服务器环境来运行动态网站和 Web 应用程序。本文将详细介绍如何在 Ubuntu 系统上安装和配置 LAMP。 步骤 1: 更新系统 在开…

微信分销商城小程序源码系统在线搭建 前后端分离 带完整的安装代码包以及搭建教程

系统概述 本微信分销商城小程序源码系统采用先进的前后端分离架构设计,前端使用Vue.js框架开发,后端则基于Spring Boot构建,确保了系统的高可维护性、扩展性和性能。系统集商品展示、在线交易、会员管理、分销推广、订单处理、数据统计等功能…