广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++ Explicit关键字详细解析
  • 220
分享到

C++ Explicit关键字详细解析

Explicit关键字 2022-11-15 22:11:35 220人浏览 八月长安
摘要

explicit关键字用来修饰类的构造函数,表明构造函数是显示的,相对的是implicit关键字。首先这个关键字只能用在类内部的构造函数声明上,而不能用在类外部的函数定义上,它的作用

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;
   }
};

--结束END--

本文标题: C++ Explicit关键字详细解析

本文链接: https://www.lsjlt.com/news/172673.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ Explicit关键字详细解析
    explicit关键字用来修饰类的构造函数,表明构造函数是显示的,相对的是implicit关键字。首先这个关键字只能用在类内部的构造函数声明上,而不能用在类外部的函数定义上,它的作用...
    99+
    2022-11-15
    Explicit 关键字
  • C++中的explicit关键字详解
    目录前言1. 抑制构造函数定义的隐式转换2. 为转换显式地使用构造函数3. 类型转换运算符可能产生意外结果4. 显示的类型转换运算符5. explicit练习5.1 当不使用expl...
    99+
    2022-11-13
  • C++ explicit关键字的使用详解
    在C++中,我们有时可以将构造函数用作自动类型转换函数。但这种自动特性并非总是合乎要求的,有时会导致意外的类型转换,因此,C++新增了关键字explicit,用于关闭这种自动特性。即...
    99+
    2022-11-12
  • C++explicit关键字讲解
    目录1 隐式转换2 显示转换前言: C++编码时,可以通过构造函数将相应的数据类型转换成为C++类的对象,从某种程度来说给编码带来了方便,但并不是每次都正确,为了避免这种情况,C++...
    99+
    2022-11-12
  • C++之explicit关键字
    目录一、单参构造函数二、多参构造函数👉构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认值的构造函数,还具有类型转换的作用 一、单参构造函数 还是老朋...
    99+
    2023-05-15
    C++ explicit关键字 explicit关键字 C++ explicit
  • C++中explicit关键字怎么用
    这篇文章给大家分享的是有关C++中explicit关键字怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1 隐式转换C++ 构造函数默认类型为implicit,定义时既可以显示说明也可以默认不加该标识符。//...
    99+
    2023-06-22
  • 老生常谈C++explicit关键字
    目录显式和隐式的区别总结explicit 关键字用于显式声明一个类构造函数是显式而非隐式的,从而禁用类构造函数的隐式自动类型转换。类构造函数默认情况下即声明为implici...
    99+
    2023-03-24
    C++ explicit关键字 C++ explicit
  • C++ explicit关键字怎么使用
    这篇“C++ explicit关键字怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++ exp...
    99+
    2023-07-05
  • Java static关键字详细解析
    目录static目的static范围静态(static)修饰静态变量静态方法静态代码块静态类static变量存储在方法区(Method Area)static目的 java中的sta...
    99+
    2022-11-13
  • C++中如何使用 explicit关键字
    这期内容当中小编将会给大家带来有关C++中如何使用 explicit关键字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C++ explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有&...
    99+
    2023-06-17
  • C++ const关键字分析详解
    目录C语言中修饰变量C语言中修饰指针变量C语言中修饰函数的参数C++中修饰变量C++中修饰函数的参数C++中修饰函数的返回值C++中修饰类的成员函数C++中修饰类的成员变量总结C语言...
    99+
    2022-11-12
  • C++中explicit关键字的作用是什么
    本篇文章为大家展示了C++中explicit关键字的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对...
    99+
    2023-06-17
  • Android关键字persistent详细分析
    目录Android关键字persistent原理分析​persistent属性作用 使用 二、原理分析 1、persistent属性的解析 2、系统启动时启动persis...
    99+
    2022-11-12
  • c++中explicit与mutable关键字的深入探究
    今天说一说c++里面的两个关键字explicit和mutable。 1. explicit关键字 在写c++标准输入输出相关文章,查看iostream实现代码的时候,经常看到构造函...
    99+
    2022-11-12
  • C语言详细分析讲解关键字const与volatile的用法
    目录一、const 只读变量二、const 全局变量的分歧三、const 的本质四、const 修饰函数参数和返回值五、volatile 解析六、小结一、const 只读变量 con...
    99+
    2022-11-13
  • C语言详细分析讲解关键字goto与void的作用
    目录一、关于goto二、void 的意义三、小结一、关于goto 高手潜规则:禁用 goto项目经验:程序质量与 goto 的出现次数成反比最后的判决:将 goto 打入冷宫 下面看...
    99+
    2022-11-13
  • C/C++中的static关键字详解
    目录C/C++ 中的 static1. 静态局部变量2. 静态全局变量3. static 修饰函数C++的 static 成员静态成员变量 静态成员函数总结:static是...
    99+
    2022-11-13
  • C语言Static 关键字解析
    目录01简述02static关键字作用01简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变...
    99+
    2022-11-13
  • C# 中的partial 关键字详解
    目录引言分部类partial 分部限制分部接口和结构分部方法this 和 partial 的区别引言 partial 关键字用于拆分一个类、一个结构、一个接口或一个方法的定义到两个或...
    99+
    2022-11-13
  • C#中的yield关键字详解
    在"C#中,什么时候用yield return"中,我们了解到:使用yield return返回集合,不是一次性加载到内存中,而是客户端每调用一次就返回一个集合元...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作