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

    原文:https://www.jianshu.com/p/f05073044daf

    详细参考:https://blog.csdn.net/l2563898960/article/details/97769569

    1.explicit函数介绍

    • 作用:explicit构造函数是用来防止隐式转换的
    • 实例1如下
          #include <iostream>
      
          using namespace std;
      
          // explicit函数的介绍!!!
      
          // explicit函数的作用:explicit构造函数是用来防止隐式转换的
          class Test1{
              public:
                  Test1(int n){  // 普通隐式的构造函数
                      num = n;
                  }
              private:
                  int num;
          };
      
          class Test2{
              public:
                  explicit Test2(int n){   //explicit(显式)构造函数
                      num = n;
                  }
              private:
                  int num;
          };
      
          int main(){
              Test1 t1 = 12;  // 隐式调用其构造函数,成功
              // Test2 t2 = 12;  编译错误,不能隐式调用其构造函数
              Test2 t3(12);  //  显式调用成功
              return 0;
          }
      • Test1的构造函数带一个int型的参数,会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此Test2 t2 = 12会出现编译错误。普通构造函数能够被隐式调用,而explicit构造函数只能被显式调用。
      • 实例2如下

          class Test{
              public:
                  Test():a(0){
                      cout << "void
      ";
                  }
                  explicit Test(int i):a(i){
                      cout << "int
      ";
                  }
                  Test(short s):a(s){
                      cout << "short
      ";
                  }
                  Test & operator=(int n){
                      a = n;
                      cout << "operator = ";
                  }
              private:
                  int a;
          };
          int main(){
              int n;
              Test a = n;
              return 0;
          }

      A:接受一个参数的构造函数允许使用赋值语句隐式调用来初始化对象; 而explicit构造函数只能被显式调用!所以,输出的是short!

       
  • 相关阅读:
    XML与 实体的相互转化
    SerializeHelper
    Linq To Xml
    JsonHelper
    动态添加XtraTabControl的page页和子窗体
    窗体设置操作
    常用快捷键
    Jquery键盘事件
    Http跨域
    [转]ASP.NET母版页中对控件ID的处理
  • 原文地址:https://www.cnblogs.com/lh03061238/p/12643122.html
Copyright © 2011-2022 走看看