首页 > 编程语言 > 详细

C++的explicit关键字

时间:2021-04-28 14:50:04      阅读:23      评论:0      收藏:0      [点我收藏+]

在C++中,有一些构造函数可以进行隐式类型转换,比如下面的例子:

class Widget
{
  public:
    Widget();                         //构造函数1,不能进行隐式转换
    Widget(int a);                    //构造函数2,可以进行int的隐式转换
    Widget(float a, int b=0,int c=0); //构造函数3,可以进行float的隐式转换
};

上面Widget类有三个构造函数,其中构造函数2和3都可以进行隐式转换:

Widget w;
w = 2;
w = 3.5f;

从中也可以看到,只有一个参数的构造函数,或者构造函数有n个参数,但有n-1个参数提供了默认值,这样的构造函数才能进行隐式转换。
这种隐式的转换有时并不一定是合乎要求的,可能会导致一些隐藏的bug;因此C++11新增了关键字explicit,可以禁止这种隐式转换:

class Widget
{
  public:
    Widget();                             
    explicit Widget(int a);                
    explicit Widget(float a, int b=0,int c=0);
};

这样一来,无论是哪个构造函数都不能再进行隐式转换了:

Widget w;
w = Widget(2);
w = (Widget)3;

C++的explicit关键字

原文:https://www.cnblogs.com/wickedpriest/p/14713405.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!