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

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

我參考了MSDN和《c++标准程序库》对这个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就是这么用了。

Explicit keyword的更多相关文章

  1. Use of explicit keyword in C++

    Predict the output of following C++ program. 1 #include <iostream> 2 3 using namespace std; 4 ...

  2. C# 自己定义 implicit和explicit转换

    explicit 和 implicit 属于转换运算符,如用这两者能够让我们自己定义的类型支持相互交换explicti 表示显式转换.如从 A -> B 必须进行强制类型转换(B = (B)A) ...

  3. Explicit

    Prefixing the explicit keyword to the constructor prevents the compiler from using that constructor ...

  4. explicit 构造函数

    一.构造函数.默认构造函数.合成的默认构造函数 构造函数,是函数名与类名同样.没有返回类型的特殊的成员函数.能够有初始化列表. 默认构造函数,没有形參.或全部形參都有默认实參的构造函数. 假设没有显示 ...

  5. C++ essentials 之 explicit constructor

    这篇博客的源起是我下面的一段代码 #include <bits/stdc++.h> using namespace std; int main(){ priority_queue<l ...

  6. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  7. 9.Methods(二)

    4.Operator Overload Methods allow a type to define how operators should manipulate instances of the ...

  8. Learn Python More

    0, 看了一个python项目开源源码, 才知道现在这点python知识实在是弱爆了.. 尼玛就像学了2500个常用汉字, 然后要去理解"楚辞".. 代码如下, 解释一点一点从网上 ...

  9. backref 用法

    源码 def backref(name, **kwargs): """Create a back reference with explicit keyword argu ...

随机推荐

  1. cocos2d 创建一个黑白纹理

    @interface myGrayTexture : CCTexture2D // @param exposure 曝光 +(id) textureWithFile:(NSString*) file ...

  2. HTML5 RPG游戏引擎 地图实现篇

    一,话说全国年夜事   前没有暂看到lufy的专客上,有一名伴侣念要一个RPG游戏引擎,出于兴趣筹办入手做一做.因为我研讨lufylegend有冶时间了,对它有必然的依赖性,因而便筹办将那个引擎基于 ...

  3. 【Web优化】Yslow优化法则(四)启用Gzip压缩

    Yslow的第4个经验法则指出:启用gzip压缩功能,能够降低HTTP传输的数据和时间,从而降低client请求的响应时间. 本篇是Yslow法则的第四个,主要包含三个方面的内容: 1.      什 ...

  4. 正确Linux新手很实用20命令

     //正确Linux新手很实用20命令 //slwang  2014.4.19 1, ls list directory contents 内容 ls -l     //以详情模式(long li ...

  5. 轻松管理您的网络password

    在互联网在现在这个时代,,我们注册了很多帐户.支付宝账号password,各种宝账户password.微信,QQ,电话password,购买各种网站,金融password,它是不是让孩子们的鞋子瞬间淡 ...

  6. Swift基础--使用TableViewController自己定义列表

    首先建立一个swift项目,把storyboard的内容删掉,加入一个Navigation Controller.然后设置storyboard相应界面的class,在Navigation Contro ...

  7. awk与sed:关于多行的样本

    几天前CSDN看到一个帖子http://bbs.csdn.net/topics/390848841,楼主贴了以下的问题: 例: 12345 67890 1234567890 123 4567890 怎 ...

  8. Test SRM Level Three: LargestCircle, Brute Force

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3005&rd=5858 思路: 如果直接用Brute F ...

  9. 小米2S 中文和英文支持TWRP,真实双系统支持

    经过我几天的努力小米2S的TWRP 的功能已经完美了. 支持功能 : 中文和英文显示能相互切换 真实双系统功能已经完成95%. 刷入手机方法.由于时间原因我只制作了img文件.没有制作成卡刷包格式. ...

  10. 删CentOS / RHEL库和配置文件(Repositories and configuraiton files)

    1 删除库简介 随着root权限执行以下的命令: # cd /etc/yum.repos.d/ 列出全部库(repo) #ls CentOS-Base.repo epel.repo mirrors-r ...