BigJacky 2016-06-10 03:16 采纳率: 0%
浏览 2144

C++中explicit关键字有什么用?

C++中explicit关键字有什么用?请举一个例子。我实在是不懂

  • 写回答

2条回答 默认 最新

  • 小灸舞 2016-06-10 07:43
    关注

    c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?
    如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:

     class MyClass
    {
    public:
      MyClass( int num );
    }
    //.
    MyClass obj = 10; //ok,convert int to MyClass
    

    在上面的代码中编译器自动将整型转换为MyClass类对象,实际上等同于下面的操作:
    MyClass temp(10);
    MyClass obj = temp;
    上面的所有的操作即是所谓的"隐式转换"。

    如果要避免这种自动转换的功能,我们该怎么做呢?嘿嘿这就是关键字explicit的作用了,将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的MyClass类的构造函数为显式的,那么下面的代码就不能够编译通过了,如下所示:

    class MyClass
    {
    public:
      explicit MyClass( int num );
    }
    //.
    MyClass obj = 10; //err,can't non-explict convert
    
    评论

报告相同问题?

悬赏问题

  • ¥15 优质github账号直接兑换rmb,感兴趣伙伴可以私信
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)