Explicit 关键字简介

2023-11-11

                                                                                                                                    Explicit 关键字简介

    explicit关键字用来修饰类的构造函数,表明构造函数是显示的,相对的是implicit关键字。

    首先这个关键字只能用在类内部的构造函数声明上,而不能用在类外部的函数定义上它的作用是不能进行隐式转换

    class gxgExplicit  //没有关键字explicit的类

    {

      public:

          int _size;

         gxgExplicit(int size)

        {

           _size = size;

        }

     };

    下面是调用

   gxgExplicit gE1(24);     //这样是没有问题的

   gxgExplicit gE2 = 1;     //这样也是没有问题的

   gxgExplicit gE3;         //这样是不行的,没有默认构造函数

   gE1 = 2;                 //这样也是没有问题的

   gE2 = 3;                 //这样也是没有问题的

   gE2 = gE1;               //这样也是没有问题的

    但是假如gxgExplicit修改为Stack,我们的_size代表的是堆栈的大小,那么调用的第二句就显得不伦不类,而且容易让人疑惑。这并不是可以让代码阅读者明白和接受的形式,虽然它是合法的(编译器可以通过编译)。这是因为编译器默认情况下有隐式转换的功能,你输入gE2 = 1就编译成同第一句相同的结果。所以,explicit就派上了用场。修改代码为:

    class gxgExplicit

    {

      public:

           int _size;

           explicit gxgExplicit(int size)

           {

             _size = size;

           }

    };

继续上面的调用:

   gxgExplicit gE1(24);     //这样是没有问题的

   gxgExplicit gE2 = 1;     //这样是不行的,关键字取消了隐式转换

   gxgExplicit gE3;         //这样是不行的,没有默认构造函数

   gE1 = 2;                 //这样是不行的,关键字取消了隐式转换

   gE2 = 3;                 //这样是不行的,关键字取消了隐式转换

   gE2 = gE1;               //这样是不行的,关键字取消了隐式转换,除非类实现操作符“=”的重载。

    这是编译器(vs2005)显示:cannot convert from 'int' to 'gxgExplicit'。

    从这里也就看出这个关键字的作用是将编译器隐式转换的功能给屏蔽掉。

    MSDN上有一个注意点描述了下面的事实,当构造函数参数超过两个时自动取消隐式转换。例如

    class gxgExplicit

    {

      private:

         int _size;

         int _age;

      public:

          explicit gxgExplicit(int age,int size)

         {

            _age = age;

            _size = size;

         }

     };

这是有没有关键字效果是一样的。那就是相当于有这个关键字。

但是另外一种情况例外:其中只有一个必须输入的参数,其余的为有默认值的参数。

class gxgExplicit

{

private:

   int _size;

   int _age;

public:

   explicit gxgExplicit(int age,int size = 0)

   {

      _age = age;

      _size = size;

   }

};

class gxgExplicit

{

private:

   int _size;

   int _age;

int _hight;

public:

   explicit gxgExplicit(int age,int size = 0)

   {

      _age = age;

      _size = size;

      _hight = hight;

   }

};

 参考:http://blog.csdn.net/callmeback/article/details/4039304

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Explicit 关键字简介 的相关文章

随机推荐

  • reg型变量怎么赋值_FPGA的wire和reg类型变量

    1 wire型 网络类型变量表示结构实体 如门 之间的物理连接 网络类型变量不能存储值 而且它必须要受到驱动器 如门或连续赋值语句 如assign 的驱动 如果没有驱动器连接到网络类型变量上 则该变量就是高阻的 即值为Z 常用的网络类型变量
  • 完美国际服务器管理修改经验倍数,魔兽地图编辑问题--修改经验倍数

    呵呵 我来说说吧 1 选择英雄 提供了多种英雄选择方式包括技能 能量圈 双击选择英雄的方式 2 点击单位 出现文本提示 可以用在选择英雄的时候 单击想要选择的英雄 出现该英雄拥有技能的文本提示 3 同类物品不能同时携带 当单位身上已经携带该
  • git错误The TLS connection was non-properly terminated解决

    问题描述 在执行hexo d发布文章时候 出现错误 error fatal unable to access https github com huanyouchen huanyouchen github io git gnutls han
  • java OA 系统开发二:数据库设计之oa数据库设计

    一 概述 oa数据库表设计 用户信息表 机构信息表 部门信息表 员工考勤 我的便签 消息管理 邮件管理 登入日志 操作日志 考勤标准 文档类型 考勤统计 我的日程 部门日程表 用户角色中间表 角色管理 角色菜单中间表 菜单父节点 菜单子节点
  • 这篇文章完美的解释了为什么有人不喜欢Spinner,当它在某些主题下出来的非常丑

    这篇文章完美的解释了为什么有人不喜欢Spinner 当它在某些主题下出来的非常丑 http www jcodecraeer com a anzhuokaifa androidkaifa 2015 0105 2264 html
  • 华为OD机试真题 Java 实现【最远足迹】【2022Q4 100分】,附详细解题思路

    目录 一 题目描述 二 输入描述 三 输出描述 四 解题思路 五 Java算法源码 六 效果展示 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 某探险队负责对地下洞穴进行探险 探险队成员在进行探险任务时 随身携带的记录
  • Java基础小测总结

    1 非抽象实现接口后 实现接口中方法的原则 两同两小一大原则 方法名相同 参数类型相同 子类返回类型小于等于父类方法返回类型 子类抛出异常小于父类方法抛出异常 子类访问权限大于等于父类方法访问权限 2 volatile关键字 被volati
  • 踩坑 calendar.getActualMaximum(calendar.DAY_OF_MONTH)函数

    当使用calendar getActualMaximum calendar DAY OF MONTH 获取每月最后一天时或者获取当季的最后一天时 会出现在二月的时候获取的不准确的情况 问题出现原因 代码没有动过 之前一直是使用这个时间函数来
  • 如何使用数字孪生和人工智能优化制造

    将数字孪生 digital twin 与人工智能 AI 相结合 可以减少甚至消除产品制造过程中的 臆测 几率 降低因不合理的想法实施带来的损失 那么 到底什么是数字孪生 它又是如何使现实中的生产过程变得更加高效的 CXO TALK采访了西门
  • 白嫖 IBM LinuxOne 服务器教程

    白嫖 IBM LinuxOne 教程 1 介绍 1 1前言 LinuxONE Community Cloud是IBM联合Marist大学为学生提供的用于测试应用程序和网站的平台 提供长达120天的免费VPS 温馨提醒 这个 VPS 是 S3
  • 游戏中关于跳跃的函数图像的推导以及应用

    跳跃应该是游戏开发中一个最常见的功能之一 实现的方法也有很多 这里我来讲一个我以前用的一个方法 正常的跳跃 如果使用物理引擎的话 就直接给一个向上的力就可以了 但是有一些游戏 例如跑酷 角色的移动速度都是越来越快的 而如果还是只给一个向上的
  • 【第2篇】VGG——引用最多的论文

    文章目录 摘要 1 引言 2 ConvNet配置 2 1 架构 2 2 配置 2 3 讨论 3 分类框架 3 1 训练 3 2 测试 3 3 实现细节
  • 什么是TPS,什么是QPS,区别是什么?

    一 TPS Transactions Per Second 每秒传输的事物处理个数 即服务器每秒处理的事务数 TPS包括一条消息入和一条消息出 加上一次用户数据库访问 业务TPS CAPS 每个呼叫平均TPS TPS是软件测试结果的测量单位
  • SpringBoot项目jwt生成token集成redis

    业务逻辑 1 用户登录 使用jwt生成token 2 后端把这个token返回给前端 同时把这个token作为key存储在redis中 用户对象作为value 并设置一个过期时间 3 用户以后每次访问都携带这个token 如果这个token
  • Redis--基础知识点--17--rdb_aof

    1 持久化 1 1 什么是持久化 持久化 Persistence 即把数据 如内存中的对象 保存到可永久保存的存储设备中 如磁盘 持久化Redis所有数据保持在内存中 对数据的更新将异步地保存到磁盘上 1 2 持久化的实现方式 快照方式持久
  • Jenkins 自由风格项目 更新网站静态文件

    要想去更新网站必须先创建新的任务 任务名写上网站的名字 现在去更新静态的logo图片是不需要编译的 所以这里不会用到创建maven项目 这里选择构建自由风格的软件项目 无需使用make ant maven去编译 创建好任务之后需要做一些配置
  • Java Controller层异常处理示例【含面试题】

    AI绘画关于SD MJ GPT SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 A
  • vscode 内置了 Settings Sync功能

    preface 好尴尬 昨天 刚写完了 通过 settings sync 插件 来同步 vscode 扩展配置 今早 刷 twitter 发现 微软内置了 同步插件 Settings Sync 同步的内容更多 操作更简单 1 客户机A 更新
  • 【C++】list 的使用

    如有侵权 请联系删除 目录 常用操作 要点总结 相关参考资料 常用操作 C 中的list是一种双向链表容器 提供了高效的插入和删除操作 下面是使用list的一些基本操作 包含头文件 在使用list之前 需要包含以下头文件 include
  • Explicit 关键字简介

    Explicit 关键字简介 explicit关键字用来修饰类的构造函数 表明构造函数是显示的 相对的是implicit关键字 首先这个关键字只能用在类内部的构造函数声明上 而不能用在类外部的函数定义上 它的作用是不能进行隐式转换 clas