主要用于类的构造函数限制其只允许显示构造,而不能隐式构造,所以只修饰单参构造,因为无参和多参构造本来就是显示的,所谓隐式构造可以看以下例子。
#include<iostream>
using namespace std;
class Explicit
{
private:
int val;
public:
Explicit(int x) :val(x)
{
cout << "int" << endl;
}
Explicit(const char* str)
{
cout << "string" << endl;
}
};
int main()
{
Explicit a(3);
Explicit b = 3;
Explicit c("test");
Explicit d = "test";
}
其中 Explicit b = 3;
和Explicit d = "test";
这种用 = 赋给变量的构造方式就是隐式构造。这样写不会报错,但终归不是很好,所以如果想禁止这种构造方式就可以修饰一个explicit
。
#include<iostream>
using namespace std;
class Explicit
{
private:
int val;
public:
explicit Explicit(int x) :val(x)
{
cout << "int" << endl;
}
explicit Explicit(const char* str)
{
cout << "string" << endl;
}
};
int main()
{
Explicit a(3);
Explicit b = 3;
Explicit c("test");
Explicit d = "test";
}
加上这个修饰这两句就会报错了。