C ++ puede evitar la conversión implícita de tipos incorporados a través de
El caso donde no se usa explícito:
Durante la construcción de una clase general:
#include<iostream>
using namespace std;
class A
{
public:
A(int num):x(num){}
int x;
};
int main()
{
A a(1);
cout<<a.x<<endl;
}
también se puede escribir como:
#include<iostream>
using namespace std;
class A
{
public:
A(int num):x(num){}
int x;
};
int main()
{
A a = 1;
cout<<a.x<<endl;
}
La conversión implícita de int a A se realiza en este proceso
Esto traerá ciertos riesgos de seguridad.
Después de usar la palabra clave explícita
Después de usar explícito, se puede completar el proceso de construcción normal:
#include<iostream>
using namespace std;
class A
{
public:
explicit A(int num) :x(num) {}
int x;
};
int main()
{
A a(1);
cout << a.x << endl;
}
puede ser compilado por
#include<iostream>
using namespace std;
class A
{
public:
explicit A(int num) :x(num) {}
int x;
};
int main()
{
A a = 1;
cout << a.x << endl;
}
El compilador reportará un error:
Se puede encontrar que esta conversión implícita está deshabilitada