c++ explicit关键字
转自:https://blog.****.net/qq_37233607/article/details/79051075
先看以下代码:
#include<iostream>
using namespace std;
class A
{
public:
A(int i = 5) {
m_a = i;
};
~A();
int get_a() {
return m_a;
}
private:
int m_a;
};
A::~A()
{
}
int main() {
A s;
s = 10;
cout << s.get_a() << endl;
system("pause");
return 0;
}
当类只有一个参数的时候,是可以隐式赋值的。可在main函数里直接把int 10赋值给类A s.
由此可知:当类构造函数的参数只有一个的时候,或者所有参数都有默认值的情况下,类A的对象时可以直接被对应的内置类型隐式转换后去赋值的,这样会造成错误,所以接下来会体现出explicit这个关键词的作用.
#include<iostream>
using namespace std;
class A
{
public:
explicit A(int i = 5) {
m_a = i;
};
~A();
int get_a() {
return m_a;
}
private:
int m_a;
};
A::~A()
{
}
int main() {
A s;
s = 10;//这样会出错!!
cout << s.get_a() << endl;
system("pause");
return 0;
}
通过两个例子我们知道:explicit可以抑制内置类型隐式转换,所以在类的构造函数中,最好尽可能多用explicit关键字,防止不必要的隐式转换.