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\n", i);                        //引入后直接使用 
    printf("i = %d\n", Second::i);         //直接使用 
    
    Stu stu1 = {"Jude", 1};                 //引入后直接使用 
    
    printf("stu1.name = %s\n", stu1.name);
    printf("stu1.number = %d\n", stu1.number);
    
    
    /**************命名空间的成员与局部变量成员的冲突测试*****************/ 
    int i;                                              //没问题 
    using Second::j;
    int j;                                              //报错 
    
    return 0;
}

命名空间的别名

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

定义别名:

namespace 别名 = 命名空间名

转载于:https://www.cnblogs.com/Ljian1992/p/4199903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
命名空间的使用有三种方式: 1. 使用命名空间名称及作用域限定符,比如c::a。 2. 使用using关键字将命名空间中的成员引入,比如using c::a。 3. 使用using namespace命名空间名称引入命名空间的所有成员,比如using namespace c。 其中,方法一是通过在成员前加上命名空间名称和作用域限定符来访问命名空间中的成员。方法二是通过using关键字将特定的成员引入,使得可以直接使用该成员。方法三是使用using namespace关键字引入整个命名空间的所有成员,使得可以直接使用命名空间中的所有成员。 需要注意的是,在使用命名空间时,可以采用方法一、方法二或方法三的任意一种方式,具体选择哪种方式取决于实际需求和代码的清晰度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++命名空间](https://blog.csdn.net/zhang21722668/article/details/83869631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++命名空间(namespace)的使用](https://blog.csdn.net/qq_43533553/article/details/123257675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值