c++命名空间

命名空间

  1. 解决全局变量冲突
  2. 命名空间可以扩展
  3. 命名空间可以多层嵌套
  4. 命名空间不存在私有
  5. 命名空间内层变量覆盖外层变量
  6. 匿名空间等同于全局变量
  7. 给命名空间起别名

使用命名空间

#include <iostream>

using namespace std;  //引用叫std命名空间

int main(int argc, char* argv[])
{
	//:: 作用于操作符
	//使用命名空间 命名空间名称后跟作用域操作
	std::cout << "hello c++" << std::endl;  //使用标准库cout进行输出打印
	
	return 0;
}

命名空间解决全局变量冲突

#include <iostream>

using namespace std;

int sum = 200;				  //全局变量

namespace test
{
	int sum = 100;
}

int main(int argc, char* argv[])
{
	std::cout << ::sum << std::endl;  //输出全局变量sum

	cout << ::sum << endl;	          //上一行的简化写法

	cout << sum << endl;	          //同上两行一样

	cout << test::sum << endl;        //输出test命名空间下的变量sum

	cin.get();			  //等待输入

	return 0;
}

命名空间可以扩展

#include <iostream>

using namespace std;

namespace exstion1
{
	int data = 100;
}

namespace exstion1
{
	int num = 100;
}

//定义两个相同名字的命名空间,编译时会进行合并

int main(int argc, char* argv[])
{
	cout << exstion1::data << endl;
	cout << exstion1::num << endl;

	cin.get();
}

命名空间多层嵌套

#include <iostream>

using namespace std;

//命名空间嵌套
namespace partenNode
{
	namespace childNode
	{
		int num = 100;
	}
}

int main(int argc, char* argv[])
{
	cout << partenNode::childNode::num << endl;  //使用多层嵌套命名空间
	cin.get();
	return 0;
}

命名空间内层覆盖外层变量

#include <iostream>

using namespace std;

namespace externNameSpace
{
	int sum = 100;
	namespace insideNameSpace
	{
		int sum = 200;
	}
}

int main(int argc, char* argv[])
{
	cout << externNameSpace::insideNameSpace::sum << endl;

	cin.get();
	return 0;
}

匿名空间等同于全局变量

#include <iostream>

using namespace std;


//匿名命名空间
namespace 
{
	int sum = 100;
	
}

int main(int argc, char* argv[])
{
	cout << sum << endl;

	cin.get();
	return 0;
}

给自定义命名空间起别名

#include <iostream>

using namespace std;

namespace myNameSpace
{
	int sum = 100;
}

namespace my = myNameSpace;  //给myNameSpace改一个别名为my

int main(int argc, char* argv[])
{
	cout << my::sum << endl;

	cin.get();
	return 0;
}
秋风 2018-03-11