1:名称空间,也成为名字空间、命名空间,关键字为namespace。我们经常使用这样一条语句:
using namespace std;
我们要使用标准输入输出流,除了包含它们所在的头文件外,还必须使用它们的名称空间。实际上,namespace后面的std正是该名称空间的名称。它主要作用就是防止
不同文件中包含的同一变量、函数等因名字重复而导致错误。“using namespace std”表示在本件中使用所有名字为std的空间中的所有数据,而不需要像下面这样加上名称标识:
using std::cout;
using std::endl;
除了上述两种方法之外,最常用的方法是如下形式:
std::cout<<"hi!!"<<endl;
将这3种方法相比较,可得出下面的结论:
(1)第一种方法使用简便,编程者不需要逐个包含名称空间中的变量、函数等,而可以直接使用它们。缺点是,在文件中失去了名称空间应有的作用,定义时需要注意与
该名称空间中的各个数据命名冲突问题。
(2)第二种方法比较折中,它可以方便编程者使用名称空间中的少数数据。
(3)第三种方法在每次使用名称空间中数据时,都要加上名称空间的名字,引用起来比上述两种方法稍显繁琐。但这种方法在所有情况下都试用,不会造成混乱,在编写大型项目时比较实用。
2:定义一个名称空间可以用namespace关键字,形式如下:
namespace 名称空间名{
代码
}
代码例子如下:
// 4.11.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using std::cout;//头文件包含了std名称空间,可以使用 using std::endl; namespace welcome { int count = 3; float getCount() { return 3.33f; } } using namespace welcome;//定义名称空间,之后使用 namespace hello { int count = 4; float getCount() { return 4.44f; } } float getCount() { return 1.11f; } int main() { int count = 1; cout << "直接调用getCount函数和使用count" << endl; //cout<<"getCount:"<<getCount()<<endl; 编译器函数重载冲突 cout << "count:" << count << endl; cout << "--------------------------------------" << endl;//视觉分割线 cout << "使用域标识符调用getCount函数和使用count" << endl; cout << "::getCount:" << ::getCount() << endl; //没有定义名称空间 cout << "count:" << ::count << endl;// cout << "welcome::getCount:" << welcome::getCount() << endl; cout << "welcome::count:" << welcome::count << endl; cout << "::getCount:" << hello::getCount() << endl; cout << "hello::count:" << hello::count << endl; return 0; }
运行结果: