C++中namespace与using

namespace关键字

namespace的出现是为了解决命名冲突的问题,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。

namespace的语法

(namespace只能在全局作用域中定义,在函数内、类内、结构体内等处定义是不对的)

namespace zhang{
	//内容
}

namespace的用法

1.引用变量。

2.引用函数。

3.引用类、结构体。

4.namespace中可以嵌套定义namespace。

5.函数可以分离实现。

6.namespace是开放的,可以随时把新的成员加入已有的命名空间中。

例子

#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace xi{
	int atc = 200;
	void test1(){
		cout << "test1在执行" << endl;
	}
	void test2();
	class Person{
		public :
			Person(){
				cout << "Person类" << endl;
			}
	};
	namespace feng{
		int def = 300;
	}
}
void xi::test2(){
	cout << "test2在执行" << endl;
}
namespace xi{
	int time = 20;
}
int main(){
	xi::Person p;
	xi::test1();
    xi::test2();
	cout << "atc=" << xi::atc << endl;
    cout << "def=" << xi::feng::def << endl;
    cout << "time=" << xi::time << endl;
	system("pause");
	return EXIT_SUCCESS;
}

结果:证明结论正确

using关键字

using关键字可以使得namespace中存储的东西可用

示例:

#define  _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace xi{
	int atc = 200;
	int def = 300;
	void test1(){
		cout << "test1在执行" << endl;
	}
	void test2();
	class Person{
		public :
			Person(){
				cout << "Person类" << endl;
			}
	};
}
void xi::test2(){
	cout << "test2在执行" << endl;
}
namespace zhang{
	int atc = 20;
}
using namespace std;
using namespace zhang;
using namespace xi;
int main(){
	Person p;
        test2();
	cout << "xi::atc" << xi::atc << endl;
	system("pause");
	return EXIT_SUCCESS;
}

但是为什么引用atc变量时还是要加上xi::呢,是因为名为zhang和名为xi的命名空间中都有atc这个变量,此时需要指明引用的是哪个命名空间中的变量。(函数、类、结构体同理)。

猜你喜欢

转载自blog.csdn.net/qq_41313587/article/details/100056209
今日推荐