博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Explicit keyword
阅读量:6260 次
发布时间:2019-06-22

本文共 1651 字,大约阅读时间需要 5 分钟。

说实话,从来没有感觉到这个keyword实用,直到今天。

explicit的意思是明显的,和它相相应的一个词是implicit意思是隐藏的。

我參考了MSDNc++标准程序库》对这个keyword的描写叙述,并參考了网络上对这个keyword的解释。现将它的用法和总结记录例如以下:

首先这个keyword仅仅能用在类构造函数。它的作用是不能进行隐式转换。

class gxgExplicit  //没有keywordexplicit的类

{

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代表的是堆栈的大小,那么调用的第二句就显得不伦不类,并且easy让人疑惑。这并非能够让代码阅读者明确和接受的形式,尽管它是合法的(编译器能够通过编译)。这是由于编译器默认情况下有隐式转换的功能,你输入gE2 = 1就编译成同第一句同样的结果。所以,explicit就派上了用场。改动代码为:

class gxgExplicit

{

public:

   int _size;

   explicit gxgExplicit(int size)

   {

      _size = size;

   }

};

继续上面的调用:

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

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

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

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

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

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

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

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

 

MSDN上有一个注意点描写叙述了以下的事实,当构造函数參数超过两个时自己主动取消隐式转换。比如

class gxgExplicit

{

private:

   int _size;

   int _age;

public:

   explicit gxgExplicit(int age, int size)

   {

      _age = age;

      _size = size;

   }

};

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

可是第二种情况例外:当中仅仅有一个必须输入的參数,其余的为有默认值的參数。

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;

   }

};

 

这种情况下相当于一个參数的效果。

到如今为止。这个keyword就是这么用了。

 

 

 

转载地址:http://biqsa.baihongyu.com/

你可能感兴趣的文章
HDU4638:Group(线段树离线处理)
查看>>
Jenkins构建触发器
查看>>
COCOS学习笔记--即时动作ActionInstant
查看>>
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
查看>>
最全面的JS表单验证
查看>>
VS2013 查看程序各个函数的CPU利用率<转>
查看>>
python-标识符(Identifiers)和关键字(keywords)
查看>>
iframe双滚动栏 解决方案 CSS3 overflow-y 属性
查看>>
rsync数据同步工具
查看>>
文件上传限制文件类型
查看>>
基于Android平台的会议室管理系统具体设计说明书
查看>>
Linux常见命令(四)——mkdir
查看>>
正则表达式基础知识
查看>>
Web下的HTTPS应用
查看>>
perl数组的长度与元素个数
查看>>
Netty线程模型
查看>>
『Kaggle』Sklearn中几种分类器的调用&词袋建立
查看>>
017_nginx重定向需求
查看>>
[UWP]涨姿势UWP源码——RSS feed的获取和解析
查看>>
判断一个变量是否为空的方法
查看>>