zoukankan      html  css  js  c++  java
  • C++的explicit关键字

    在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;
    
  • 相关阅读:
    css3hover效果
    相册集效果
    原生进度条
    原生放大镜效果
    字符串变数组
    原生弹幕模拟
    圣杯与双飞翼布局
    三级联动
    Redis 基础、高级特性与性能调优
    如何完美回答面试官问的Mybatis初始化原理!!!
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/14713405.html
Copyright © 2011-2022 走看看