explicit c++ 关键词

原创 2008年09月30日 20:27:00

 近来看到有书上的构造函数上写有explicit的关键词,出于好奇查个究竟,why?

原因很简单:

当构造函数的参数只有一个的时候,编译器会默认将

Type obj=0转换为Type obj(0)

或者obj = Type(0)

当然这还不局限于整数等情况

错误例子1:

class MyClass

{

    MyClass();//这个是必须的

    MyClass (int a);

};

 

在其他函数中这样调用

{

MyClass a; //如果没有默认构造函数这里就会出错

int ac = 3;

a = 4;//这里想写ac=4

}

那么这里就会有问题,因为编译器隐式转换为a = MyClass(4);记住这里的=可是基于bit的赋值,也是编译器默认提供的

当然如果你有写operator =()这个函数,那就另当别论。

错误例子2:

class MyClass

{

        MyClass (int a);

};

其他函数里这样调用

{

    MyClass a =4;//这里隐式转换为MyClass a(4)

}

所以很容易照成错误。而且这个错误不是编译错误,而是运行时可能的bug。

所以为了避免让大家犯错误,我们只有小心的设计自己的类

class MyClass

{

       explicit MyClass (int a);

};

这样如果程序中再调用MyClass a =4;这样语句,程序就会报编译错误。

其实我们写程序不光为了让别人看懂,程序运行正确,还要想方设法的让大家少犯错误。

当然如果你的构造函数必须多于一个参数,其实就没有必要用explicit关键字了。

explicit的关键字只构造函数中带一个参数的情况起作用。其书面语的作用为:禁止单参构造函数的隐式转换。

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++关键字explict的详解和使用

在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。 explicit使用注意事项:     *     exp...
  • cbNotes
  • cbNotes
  • 2014年09月25日 14:00
  • 7116

C++中的explicit关键字介绍

C++中的explicit关键字介绍
  • fengbingchun
  • fengbingchun
  • 2016年04月16日 16:31
  • 6397

C++ explicit关键字 详解(用于构造函数)

在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者...
  • chinaeran
  • chinaeran
  • 2013年12月18日 22:36
  • 7637

explicit关键词用法

转载原文地址:http://www.cnblogs.com/cutepig/archive/2009/01/14/1375917.html 向原作者致敬! 按照默认规定,只有一...
  • zhiren2011
  • zhiren2011
  • 2015年09月12日 10:51
  • 262

C++中explicit作用示例代码

  • 2015年10月13日 12:48
  • 1KB
  • 下载

C++中explicit关键字的作用

explicit用来防止由构造函数定义的隐式转换。 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。 例如: clas...
  • cny901111
  • cny901111
  • 2012年07月22日 21:28
  • 608

C++ 中 explicit 关键字的作用

C++ 中 explicit 关键字的作用   在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。  exp...
  • zhangchao3322218
  • zhangchao3322218
  • 2012年11月08日 17:25
  • 399

C++:explicit 关键字

按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p )...
  • zhanghaotian2011
  • zhanghaotian2011
  • 2012年09月11日 17:02
  • 252

C++中的explicit关键字

http://blog.csdn.net/chollima/article/details/3486230 在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很...
  • qq_25600055
  • qq_25600055
  • 2017年01月04日 23:42
  • 151

转:C++ 中explicit关键字

explicit用来防止由单参数构造函数定义的隐式转换,但是另外一种情况例外:其中只有一个必须输入的参数,其余的为有默认值的参数。 先扫盲下什么是隐式转换:可以用单个实参来调用的构造函数定义...
  • xingyevc
  • xingyevc
  • 2014年09月15日 14:47
  • 156
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:explicit c++ 关键词
举报原因:
原因补充:

(最多只允许输入30个字)