• C++命名空间


    概述

    在C语言中程序的全局变量作用域只有一个,所有的全局标识符都共享同一个作用域,在多人开发的时候,容易造成标识符冲突。C++为了解决这个问题提出了命名空间这一概念,通过命名空间把全局变量作用域划分为不同的部分,不同的命名空间中的可以相同但不产生冲突。

          Tips: 标识符:标识符是指常量、 变量、语句标号,用户自定义函数的名称,用户类型等等

    命名空间定义

    namespace name

    {

    //自定义的标识符

    }

    Tips: 1.在全局作用域也叫默认命名空间,在全局作用域定义的自定义标识符都属于默认命名空间

             2.命名空间可以嵌套定义

      例

    namespace First
    {
        int i = 0;
    }
    
    namespace Second
    {
        int i = 1;
        int j = 2;
        
        namespace Internal
        {
            struct Stu 
            {
                char name[30];
                unsigned int number;
            };
        }
    }

     

    命名空间的使用

    定义了命名空间后,接下来就要使用命名空间了。由于“全局作用域”通过命名空间被划分为了多个小的全局作用域。因此,使用命名空间中的成员需要先确定成员属于哪一个命名空间。

         直接使用:

           命名空间名::[命名空间名::……]成员名;

         引入:

               1.引入命名空间中所用的成员:using namespace 命名空间名[::命名空间名…];

               2.引入命名空间中的单一成员:using 命名空间名::[命名空间名::……]成员名;

            引入用命名空间的成员之后,就可以直接使用命名空间中的成员的。这就遇到一个问题,当引入成员名称与局部成员 名称同名时,会是谁覆盖谁,还是报错?编译器两者方式都会采取

                       1.当引入命名空间中所用的成员时,局部成员覆盖命名空间中的成员。

                       2.当引入命名空间中的单一成员时,编译器报错。

    例:

    #include <stdio.h>
    
    namespace First
    {
        int i = 0;
    }
    
    namespace Second
    {
        int i = 1;
        int j = 2;
        
        namespace Internal
        {
            struct Stu 
            {
                char name[30];
                unsigned int number;
            };
        }
    }
    
    int main(void)
    {
        using namespace First;                  //引入所有成员 
        using Second::Internal::Stu;          //引入单一成员 
        
        printf("i = %d
    ", i);                        //引入后直接使用 
        printf("i = %d
    ", Second::i);         //直接使用 
        
        Stu stu1 = {"Jude", 1};                 //引入后直接使用 
        
        printf("stu1.name = %s
    ", stu1.name);
        printf("stu1.number = %d
    ", stu1.number);
        
        
        /**************命名空间的成员与局部变量成员的冲突测试*****************/ 
        int i;                                              //没问题 
        using Second::j;
        int j;                                              //报错 
        
        return 0;
    }

    命名空间的别名

    上次将引用的时候所,引用是一个变量的别名。命名空间也是可以用别名。

    定义别名:

    namespace 别名 = 命名空间名

  • 相关阅读:
    FLEX图像工具类-图像变形
    flex中list或Combox中的子项上移下移操作
    flex中socket的使用
    Flex2款简单FLV播放器很经典
    Flex中Css参考示例
    Flex中CursorManager的应用
    关于FLEX的安全沙箱问题
    Flex实现多文件上传之一:前台部分
    Flex与JS通信
    metasploit 常用指令
  • 原文地址:https://www.cnblogs.com/Ljian1992/p/4199903.html
Copyright © 2020-2023  润新知