c++——::alcance, espacio de nombres, uso (declaración y directiva de compilación)

control de nombre y alcance de c++

1. ::(dos dos puntos) alcance

El operador <::> es un alcance. Si no hay nada delante de <::>, significa que es un alcance global.

2. Espacio de nombres (espacio de nombres)

1、espacio de nombres

La esencia es el alcance. El espacio de nombres de alcance que puede controlar mejor el identificador puede almacenar la estructura de clase de función variable...

2. Uso del espacio de nombres

1. La definición del espacio de comando: debe definirse en el ámbito global.
2. Las variables, funciones, estructuras y clases se pueden almacenar en el espacio de nombres.
3. Los espacios de nombres se pueden cambiar de nombre. Un espacio de nombres renombrado equivale a fusionarse. 4. Los espacios de nombres operativos pueden anidar espacios de nombres
5. El espacio de nombres puede tener alias
6. El espacio de nombres puede no tener nombre
7. Las funciones en el espacio de nombres pueden declararse primero y definirse externamente. Es necesario agregar el alcance del espacio de nombres al definir

#include <iostream>
using namespace std;

namespace A
{
    
    
	int a = 10;
	void fun(){
    
    
		cout << "hello namespace" << endl;
	}
	void function(int val);
}
void A :: function(int val){
    
    
	cout << "hello function" <<endl;
}
namespace B
{
    
    
	int a = 10;
	int b = 20;
}
namespace C
{
    
    
	int a = 20;
	namespace D{
    
    
		int a = 10;
	}
}

void print(){
    
    
	cout << "namespaceA a = " << A :: a <<endl;
	cout << "namespaceB a = " << B :: a << endl;
	cout << "namespaceB b = " << B :: b << endl;
	A :: fun();
	cout << "namespaceD a = " << C :: D :: a << endl;
}

int main(){
    
    
	print();
}

3. Espacio de nombres sin nombre

Si el espacio de nombres no tiene un nombre, todos los miembros del espacio de nombres están decorados con estática por el compilador y
solo pueden ser llamados por el archivo actual. Este es un atributo de enlace interno.

namespace{
    
    
int a=10:
void func(){
    
    
 cout << "hello namespace" << endl:
 }

4. Alias ​​de espacio de nombres

namespace newname = oldname; 

Tres, declaración de uso y directiva de compilación

1. Declaración de uso:
si es necesario acceder con frecuencia a las variables, objetos o funciones en un determinado espacio y no desea agregar :: (alcance de dos puntos dobles) cada vez, puede usar la declaración de uso.

#include <iostream>
using namespace std;
namespace A 
{
    
    
	int a = 100;
	void index(){
    
    
		cout << "hello" << endl;
	}
}

void fun(){
    
    
//多次访问A下面的a旧的加上作用域::
	cout << A :: a << endl;
	cout << A :: a << endl;
	cout << A :: a << endl;

//那可以用using来声明解决不要每次都要写这个作用域
	using A ::a;
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
	index();
}

int main(){
    
    
	
	return 0
}

Nota : Cuando el identificador declarado con el uso entra en conflicto con otros identificadores en el alcance, se producirá ambigüedad.

void fun(){
    
    
	int a = 10;//err
	using A ::a;
	cout << a << endl;
	cout << a << endl;
	cout << a << endl;
}

2. uso de la directiva de compilación:
hace que todo el identificador del espacio de nombres esté disponible.

namespace nameA
{
    
    
	int a = 10;
	void fun(){
    
    
		cout << "hello" << endl;
	}
}

void function(){
    
    
	int a = 100;
	//如果在using编译指令前也一个相同的变量,就不会像using声明一样有冲突。
	using namespace nameA;
	//此时a的值是局部变量的值100
	cout << a << endl;
	fun();
}

Se recomienda utilizar la directiva del compilador de uso en lugar de la declaración de uso.

Supongo que te gusta

Origin blog.csdn.net/qq_57737603/article/details/132309530
Recomendado
Clasificación