c++中explicit关键字用法

c++中explicit关键字用法

对于这个关键字的作用主要就是禁止隐式转换!

官方中文文档描述如下:

explicit(1)
explicit ( 表达式)(2)(C++20 起)

表达式 - 经按语境转换为 bool 类型的常量表达式

(1) 指定构造函数或转换函数 (C++11 起)或推导指引 (C++17 起)为显式,即它不能用于隐式转换和复制初始化。

(2) explicit 说明符可以与常量表达式一同使用。当且仅当该常量表达式求值为 true 时函数为显式。

explicit 说明符只可出现于在类定义之内的构造函数或转换函数 (C++11 起)的 声明说明符序列 中。

c++隐式转换示例:

#include <iostream>
using namespace std;class A
{
public:A(int a) : m_a(a) { cout << "A(int a)" << endl; }~A() { cout << "~A()" << endl; }int m_a;
};void show(const A &p)
{cout << "A.m_a = " << p.m_a << endl;
}int main()
{show(1);return 0;
}

输出结果:

A(int a)
A.m_a = 1
~A()

可以看到,调用show函数的时候,自动将参数整型1转换成了A类型。

如果在类A的构造函数前加上explicit就可以禁止类型转换

explicit A(int a) : m_a(a) { cout << "A(int a)" << endl; }编译结果:
error: invalid initialization of reference of type ‘const A&’ from expression of type ‘int20 |     show(1);

c++20中还可以使用表达式来控制是否使用隐式转换

explicit(false) A(int a) : m_a(a) { cout << "A(int a)" << endl; } // 允许隐式转换

当表达式中为ture表示禁止使用隐式转换,false表示允许使用。

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

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

相关文章

系列十五、BeanDefinition

一、BeanDefinition 1.1、概述 BeanDefinition是一个接口&#xff0c;主要负责存储bean的定义信息&#xff0c;决定bean的生产方式&#xff0c;是一个定义态的bean&#xff0c;类似于说明书。后续BeanFactory就可以根据这些信息生产bean了。比如实例化&#xff1a;可以通过反射…

NTT 的各类优化:Harvey、PtNTT,Intel AVX2、ARM Neon、GPGPU

参考文献&#xff1a; [Har14] Harvey D. Faster arithmetic for number-theoretic transforms[J]. Journal of Symbolic Computation, 2014, 60: 113-119.[Sei18] Seiler G. Faster AVX2 optimized NTT multiplication for Ring-LWE lattice cryptography[J]. Cryptology ePr…

QML Column Row 属性 pyside6

在 QML 中&#xff0c;Column 和 Row 是常用的布局元素&#xff0c;用于水平&#xff08;Row&#xff09;和垂直&#xff08;Column&#xff09;排列它们的子元素。以下是这两个元素的主要属性列表&#xff1a; Column 属性 spacing: 子元素之间的垂直间隔。width 和 height:…

并查集带权并查集

定义 : 并查集 : 一种数据结构&#xff0c;用于处理一些不相交集合的合并与查询问题&#xff1b; 例题 : 如 : 有n种元素&#xff0c;分属于不同的n个集合&#xff1b; 有两种操作 : 1.给出两个元素的亲属关系&#xff0c;合并两个集合(x与y是亲戚&#xff0c;亲戚的亲戚…

【数据库】数据库可恢复性目标的实现模型,针对灾难级故障的数据完整性保护对策

系统故障的对策 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更…

竞赛选题 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基…

tcpdump使用心得

参考原文 https://danielmiessler.com/p/tcpdump/ 几个用例 tcpdump -i eth0 显示eth0网卡当前所有的抓包情况eth0是网卡名&#xff0c;可以通过ifconfig获得&#xff0c;也可以通过 tcpdump -D 显示当前可以监听的网卡 -i 参数表示接口&#xff0c;后跟要监听的网卡 tcpdu…

树与二叉树堆:链式二叉树的实现

目录 链式二叉树的实现&#xff1a; 前提须知&#xff1a; 前序&#xff1a; 中序&#xff1a; 后序&#xff1a; 链式二叉树的构建&#xff1a; 定义结构体&#xff1a; 初始化&#xff1a; 构建左右子树的指针指向&#xff1a; 前序遍历的实现&#xff1a; 中序…

LiveData源码分析,粘性事件,数据倒灌

最近面试天天被虐&#xff0c;有个问题问的很频繁&#xff0c;就是 LiveData 的数据倒灌问题怎么解决。 我不知道有多少人连数据倒灌是什么都没听过的&#xff0c;更不要说什么解决方案啦。 我按照我的理解描述一下数据倒灌&#xff1a;就是设置了 LiveData 的数据之后&#…

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章&#xff0c;本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…

Vue学习笔记-Vuex四个map方法的使用

在组件中导入方法 import {mapState,mapGetters,mapActions,mapMutations} from vuexmapState方法的使用 注意&#xff1a;这里的…是ES6语法&#xff0c;表示将该的对象所有属性展开&#xff0c;放入其所在上级对象中 ...... computed:{//借助mapState生成计算属性&#xf…

处理跨域问题

这里只讨论后端对跨域支持,前端的跨域支持一般都是在测试阶段用用的,跨域还是要后端解决 跨域问题的产生:浏览器的一种安全机制-->同源策略限制 同源策略:URL中包括协议&#xff0c;域名&#xff0c;IP&#xff0c;端口都要完全相同&#xff0c;如果有一项不同&#xff0c;浏…

《荒野大镖客》游戏提示emp.dll丢失怎么搞,总结五个修复教程分享

在玩荒野大镖客这款游戏时&#xff0c;有些玩家可能会遇到找不到emp.dll文件的问题。这个问题通常会导致游戏无法正常运行或出现错误提示。本文将介绍荒野大镖客找不到emp.dll丢失的6种解决方法&#xff0c;并解释emp.dll是什么以及导致其丢失的原因。 什么是emp.dll&#xff…

2021-07-31

单日3亿日志数据准实时存储和分析 –ClickHouse 在自如大前端研发中心的应用 第一章 架构设计 和 用户体系建设 文章目录 单日3亿日志数据准实时存储和分析前言一、pandas是什么&#xff1f;二、使用步骤1.引入库2.读入数据 总结 前言 用户行为数据的收集和分析&#xff0c;…

JavaScript 的初步学习下篇

函数 语法格式 创建函数/函数声明/函数定义 function 函数名(形参列表) {函数体return 返回值; }函数调用 函数名(实参列表) // 不考虑返回值 返回值 函数名(实参列表) // 考虑返回值 注: 函数定义并不会执行函数体内容, 必须要调用才会执行. 调用几次就会执行几次. js 中…

怎么样的软件测试工程师才算“大神”?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

acwing算法基础之数学知识--Nim游戏和集合Nim游戏

目录 1 基础知识2 模板3 工程化 1 基础知识 &#xff08;一&#xff09; Nim游戏&#xff1a; n n n堆物品&#xff0c;每堆有 a i a_i ai​个&#xff0c;两个玩家轮流取走任意一堆的任意个物品&#xff0c;但不能不取。取走最后一个物品的人获胜。 结论&#xff1a;如果这n…

Java 多线程之 ReentrantReadWriteLock(读写锁/共享锁/排他锁)

文章目录 一、概述二、使用方法三、测试示例四、完整示例 一、概述 ReentrantReadWriteLock 是Java中提供的一种读写锁实现&#xff0c;它允许多个线程同时读取共享资源&#xff0c;但在写操作时需要独占访问。它是对传统互斥锁的一种改进&#xff0c;可以提高并发性能。 读写…

C#开发的OpenRA游戏之属性SelectionDecorations(13)

C#开发的OpenRA游戏之属性SelectionDecorations(13) 在前面分析SelectionDecorations属性类时,会发现它有下面这个属性: public class SelectionDecorations : SelectionDecorationsBase, IRender { readonly Interactable interactable; 它是定义了一个Interactabl…

【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码…