explicti 关键字
C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).
#include <iostream>
using namespace std;class A
{
public:
int val;
char* p;
A(int x){
val = x;
cout<<"1"<<" "<<val<<endl;
}
A(char* q){
p = q;
cout<<"2"<<" "<<*q<<endl;
}
};
int main(){
A a1(3); // 1 3
A a2("iiii"); // 2 i
A a3 = 4; // 1 4
A a4 ='c'; // 1 99
}
/******************************************/
用了关键字后
#include <iostream>
using namespace std;class A
{
public:
int val;
char* p;
explicit A(int x){
val = x;
cout<<"1"<<" "<<val<<endl;
}
A(char* q){
p = q;
cout<<"2"<<" "<<*q<<endl;
}
};
int main(){
A a1(3); // 1 3
A a2("iiii"); // 2 i
// A a3 = 4; // 1 4
// A a4 ='c'; // 1 99
}
explicit关键字的作用就是防止类构造函数的隐式自动转换.
/************************************************************/
在上面说了explicit关键字用于一个参数的类构造函数,如果对于多个参数的呢
#include <iostream>
using namespace std;
class A
{
public:
int val;
char* p;
explicit A(int x,int y){
val = x;
cout<<"1"<<" "<<val<<" "<<y<<endl;
}
A(char* q){
p = q;
cout<<"2"<<" "<<*q<<endl;
}
};
int main(){
A a1(3,'c'); // 1 3 99
//A a2("iiii"); // 2 i
// A a3 = 4; // 1 4
// A a4 ='c'; // 1 99
}
是无效的,但当除了第一个参数,其他参数是默认值,又是有效的
explicit A(int x,int y=10,bool t=true)
浙公网安备 33010602011771号