La palabra clave explícita de C++11

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

Supongo que te gusta

Origin blog.csdn.net/qq_36653924/article/details/129474901
Recomendado
Clasificación