知识讲解
C++中的explicit
关键字,只能用于修饰只有一个参数的类的构造函数,它的作用表明该构造函数是显示的,而非隐式的;与它对应的是关键词implicit
,表示隐式的。
类构造函数默认情况下是implicit
。
隐式构造函数定义的类有两种初始化方式(显示形式初始化和隐式形式初始化),而显示构造函数定义的类只能用显示形式初始化!
隐式构造函数:
myClass a(1) //显式形式初始化
myClass a = 1; //隐式形式初始化
显示构造函数:
myClass a(1) //显式形式初始化
类构造函数定义成隐式的好处是:在需要隐式转换时,编译器会自动帮我们转换。标准库中的String
类就是一个很好的证明。
代码演示
#include <iostream>
using namespace std;
class myClass
{
public:
myClass(int val_) : val(val_) {} //默认是隐式的implicit
//explicit myClass(int val_) : val(val_) {} //显式构造函数
int GetVal() {return val;} //私有成员变量类外无法访问,必须写一个GetVal()函数
private:
int val;
};
int main()
{
//myClass a(1); //显式形式初始化
myClass a = 1; //隐式形式初始化
cout << "a.val = " << a.GetVal() << endl;
}