C++之explicit构造函数

来源:互联网 发布:大学java 教不教线程 编辑:程序博客网 时间:2024/06/08 20:01

        在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。MSDN上的解释:

This keyword is a declaration specifier that can only be applied to in-class constructor declarations . An explicit constructor cannot take part in implicit conversions. It can only be used to explicitly construct an object 。
可以看到, explicit关键字的作用: 禁止隐式调用类内的单参数构造函数, 这主要包括三层意思:
(1)该关键字只能用来修饰类内部的构造函数
(2)禁止隐式调用拷贝构造函数
(3)禁止类对象之间的隐式转换

class People  {      public:       int age;       explicit People (int a)//加上了explict关键字的构造函数      {        age=a;       }  };  void foo ( void )  {       People p1(10); //方式一,显示调用,编译通过       People p3=10; //方式二,隐式调用,编译不通过 }

总结:explicit 只对构造函数起作用,用来抑制隐式转换,一般只将有单个参数的constructor声明为explicit,而copy constructor不要声明为explicit。explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 此时explicit关键字无效:

class DefString  // 在类构造函数参数大于或等于两个时,explicit关键字无效  {  public:      char *pstr;      int age;      int size;      explicit DefString(int age, int size)      {          this->age = age;          this->size = size;  .      }  };
0 0
原创粉丝点击