explicit关键字

目录

修饰构造函数

修饰转换运算符


         主要用于修饰构造函数或者转换运算符,为了增强类型安全性和防止意外的类型转换,防止他们被编译器隐式地用于类型转换。

修饰构造函数

class MyString {
public:MyString(const char* str) { /*...*/ }// ...
};void PrintString(const MyString& str) { /*...*/ }int main() {PrintString("Hello, world!"); // 隐式转换 const char* 到 MyString
}

这段代码中,PrintString应该接收一个MyString类型得引用作为参数,但是在main中传递一个一个char* str类型给它,由于MyString有一个接受char* str类型得构造函数,编译器自动隐式使用这个构造函数创建一个MyString对象。防止这种转换可以使用explicit关键字:

class MyString {
public:explicit MyString(const char* str) { /*...*/ }// ...
};

这时再使用PrintString("Hello, world!");会报错。

修饰转换运算符

class MyClass {
public:operator bool() const { return true; } // 隐式转换到bool
};MyClass obj;
if (obj) { /*...*/ } // obj隐式转换为bool

这里obj会被隐式转换成bool类型,使用explicit之后不会转换:

class AnotherClass {
public:explicit operator bool() const { return true; } // 明确要求转换到bool
};AnotherClass anotherObj;
// if (anotherObj) {}  // 这将导致编译错误,因为explicit阻止了隐式转换
if (static_cast<bool>(anotherObj)) { /*...*/ } // 这是正确的

这时这里得anotherObj还是原来得类型,如果想使用得化需要自己转换成bool类型。

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

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

相关文章

我的企业证书是正常的但是下载应用app到手机提示无法安装“app名字”无法安装此app,因为无法验证其完整性解决方案

我的企业证书是正常的但是下载应用app到手机提示无法安装“app名字”无法安装此app&#xff0c;因为无法验证其完整性解决方案 首先&#xff0c;确保您从可信任的来源下载并安装企业开发者签名过的应用程序。如果您不确定应用程序的来源&#xff0c;建议您联系应用程序提供者…

你写过的最蠢的代码是?——AI领域的奇妙体验

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Redis与分布式-哨兵模式

接上文 Redis与分布式-主从复制 1.哨兵模式 启动一个哨兵&#xff0c;只需要修改配置文件即可&#xff0c; sentinel monitor lbwnb 1247.0.0.1 6001 1先将所有服务关闭&#xff0c;然后修改配置文件&#xff0c;redis Master&#xff0c;redis Slave&#xff0c;redis Slave…

源码系列 之 ThreadLocal

简介 ThreadLocal的作用是做数据隔离&#xff0c;存储的变量只属于当前线程&#xff0c;相当于当前线程的局部变量&#xff0c;多线程环境下&#xff0c;不会被别的线程访问与修改。常用于存储线程私有成员变量、上下文&#xff0c;和用于同一线程&#xff0c;不同层级方法间传…

复习C语言数组的用法

实验内容 1.1设计一个函数fun&#xff0c;功能是有N*N的矩阵&#xff0c;根据给定的m值&#xff0c;m<N,将每行元素中的值&#xff0c;均往右移m个位置&#xff0c;左边置0 #include<stdio.h> void fun(int (*a)[3],int m){int n,j,i,k,num;int p2;//右移位置列数nu…

基于体素场景的摄像机穿模处理

基于上一篇一种基于体素的射线检测 使用射线处理第三人称摄像头穿模问题 基于体素的第三人称摄像机拉近简单处理 摄像机移动至碰撞点处 简单的从角色身上发射一条射线到摄像机&#xff0c;中途遇到碰撞就把摄像机移动至该碰撞点 public void UpdateDistance(float defaultDist…

OpenGL之光照贴图

我们需要拓展之前的系统,引入漫反射和镜面光贴图(Map)。这允许我们对物体的漫反射分量和镜面光分量有着更精确的控制。 漫反射贴图 我们希望通过某种方式对物体的每个片段单独设置漫反射颜色。我们仅仅是对同样的原理使用了不同的名字:其实都是使用一张覆盖物体的图像,让我…

Linux--socket编程--服务端代码

查看struct sockaddr_in包含的东西&#xff1a; 在/user/include下搜索&#xff1a;grep "struct sockaddr_in { " * -nir r : 递归 i &#xff1a; 不区分大小写 n : 显示行号 socket编程–服务端代码 /* 1、调用 socket 创建套接字 2、调用 bind 添加地址 3、lis…

apache服务器出现No input file specified.解决方案

APACHE服务器出现No input file specified.解决方案 thinkcmf程序默认的.htaccess里面的规则&#xff1a; <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA…

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 一、webdriver API public class Main {public static void main(String[] args) {ChromeOptions options=new ChromeOptions();//参数表示允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new Chr…

HPA (Horizontal Pod Autoscaler) In K8s

城市红绿灯智能调节 没准正在建设中哈哈哈 作为一位城市观察者和设计师&#xff0c;我想借助Kubernetes的HPA机制思想来描述城市红绿灯自动调节的场景。 在这个故事中&#xff0c;我们的城市面临着日益增长的交通流量和挤塞问题。为了应对这一挑战&#xff0c;城市决定引入智能…

在Windows电脑上用多开器玩网络游戏的技巧

如果你喜欢在Windows电脑上玩网络游戏&#xff0c;在同一时间内打开多个游戏账号可能会让你疑惑。但是&#xff0c;通过使用多开器&#xff0c;你可以同时在同一台电脑上打开多个游戏账号。以下是使用多开器玩网络游戏的技巧。 1.选择一个好的多开器 有很多免费或付费的多开器…

【Maven基础篇-黑马程序员】Maven项目管理从基础到高级,一次搞定!

文章目录 前言Maven简介Maven是什么Maven的作用 Maven的下载与安装Maven基础概念仓库坐标仓库配置全局setting与用户setting区别 第一个Maven程序&#xff08;手工制作&#xff09;第一个Maven程序&#xff08;IDEA生成&#xff09;使用模版&#xff08;骨架&#xff09;创建Ma…

vcruntime140.dll如何修复,快速修复vcruntime140.dll丢失的三种方法

vcruntime140.dll是Visual C 2015运行库的一个组件&#xff0c;它包含了许多运行时函数&#xff0c;用于支持各种程序的正常运行。当vcruntime140.dll文件丢失时&#xff0c;可能会导致一些程序无法正常运行。本文将详细介绍vcruntime140.dll的作用、丢失原因以及三种修复方法。…

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…

uni-app实现图片预览

uni.previewImage预览图片 使用方法&#xff1a; <image class"poster" :src"imageUrl" mode"" click"previewImg(imageUrl)"></image>const previewImg (e) > {uni.previewImage({current: e,urls: image}); } 官…

【STM32基础 CubeMX】PWM输出

文章目录 前言一、PWM是什么&#xff1f;二、CubeMX配置PWM三、代码分析3.1 CubeMX生成代码3.2 PWM的几个库函数HAL_TIM_PWM_Start 3.3 PWM回调函数3.4 占空比占空比是什么__HAL_TIM_SET_COMPARE设置占空比 四、呼吸灯示例总结 前言 STM32微控制器是一系列功能强大的微控制器&…

创建文件夹

/storage/emulated/0/代码文件/ 没有就创建 文件名命名方法&#xff1a;编号. 库 时间戳 使用Python的os模块来检查目录是否存在&#xff0c;并在不存在时创建它。下面是一个示例代码&#xff0c;演示了如何检查指定路径下的目录是否存在&#xff0c;若不存在则创建&#xf…

FFmpeg 命令:从入门到精通 | FFmpeg 基本介绍

FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍FFmpeg 简介FFmpeg 基础知识复用与解复用编解码器码率和帧率 资料 FFmpeg 命令&#xff1a;从入门到精通 | FFmpeg 基本介绍 本系列文章要解决的问题&#xff1…

微信公众号开发基本流程(记录初级流程)

微信公众号开发基本流程 一、注册公众号二、了解公众号管理页面三、必备开发者工具的使用1. 开发者文档2. 在线接口调试工具3. Web开发者工具4. 公众平台测试账号 四、细读开发者文档五、开发流程重点解析1. 开发环境准备2. 服务器基本配置3. 存取access_token参数4. 公众号消息…