• C++ 命名空间


     一、为什么使用命名空间

    考虑一种情况,当我们有两个同名的人,Zara,在同一个班里。当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如这个区域,如果它们生活在不同的区域或者它们的母亲或父亲的名字,等等。

      在您的C++应用程序中也会出现同样的情况。例如,您可能正在编写一些具有名为xyz()函数的代码,并且还有另一个可用的库,它也具有相同的xyz()函数。现在编译器无法知道您在代码中引用的xyz()函数的哪个版本。名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。

    二、命名空间的定义

    在C语言中只有一个全局作用域:

    1.C语言中所有的全局标识符共享一个作用域
    2.标识符之间可能发生冲突


    C++中提出了命名空间的概念:

    1.命名空间将全局作用域分成不同的部分,
    2.不同命名空间中的标识符可以同名而不会发生冲突
    3.命名空间可以发生嵌套
    4.全局作用域也叫默认命名空间

     

    语法:

    namespace Name
    {
    	namespace Internal
    	{
    		/*...*/
    	}
    	/*...*/
    }
    

      

    C++命名空间的使用:

    使用整个命名空间:using namespace name;
    使用命名空间中的变量:using name::variable
    使用默认命名空间中的变量:  ::variable
    #include <stdio.h>
    #include <iostream>
    namespace First 
    {
    	int i = 0;
    }
     
    namespace Second
    {
    	int i = 1;
     
    	namespace Internal //嵌套命名空间
    	{
    		struct P  //嵌套命名空间
    		{
    			int x;
    			int y;
    		};
    	}
    }
     
    int main()
    {
    	using namespace First; //使用整个命名空间
    	using Second::Internal::P;  //使用嵌套的命名空间
     
    	printf("First::i = %d
    ", i);
    	printf("Second::i = %d
    ", Second::i);  //使用命名空间中的变量
     
    	P p = { 2, 3 };
     
    	printf("p.x = %d
    ", p.x);
    	printf("p.y = %d
    ", p.y);
     
    	system("pause");
    	return 0;
    }
    

      

     三、using指令

    可以使用using namespace指令避免使用名称空间前置。该指令告诉编译器后续代码正在使用指定命名空间中的名称。

    Example:

    #include <iostream>
    using namespace std;
     
    // first name space
    namespace first_space {
       void func() {
          cout << "Inside first_space" << endl;
       }
    }
     
    // second name space
    namespace second_space {
       void func() {
          cout << "Inside second_space" << endl;
       }
    }
     
    using namespace first_space;
    int main () {
       // This calls function from first name space.
       func();
       
       return 0;
    }
    

      

    四、std命名空间

    下列代码可以引用cout而不预先添加命名空间:

    #include <iostream>
    using std::cout;
     
    int main () {
       cout << "std::endl is used with std!" << std::endl;
       
       return 0;
    }
    

      


    原文链接:https://blog.csdn.net/qq_40416052/article/details/82528676

  • 相关阅读:
    VS2015 MVC 环境下 MYSQL 数据库应用的环境问题整理。
    outlook2016无法工作
    自动测试用工具
    SUBSTRING的用法问题
    调试常碰到的配置问题杂谈
    IIS7.5配置问题(Win7 Pro,64Bit)
    IIS(SERVER)登陆失败原因调查-(Windows更新KB3161561 )浅谈2
    IIS(SERVER)登陆失败原因调查-(Windows更新KB3161561 )浅谈
    改写.html()获取修改后新修改后的Html-----Js
    前台给后台传数据的方式-----Form表单
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/11395267.html
Copyright © 2020-2023  润新知