zoukankan      html  css  js  c++  java
  • c++中无名命名空间的使用

    1. 命名空间作用

    命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
    通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。命名空间就是为了避免可能的名字冲突,保持代码的局部性。例:

    namespace Mine  
    {  
        int a;  
        void f(){/*...*/}  
        int g() {/*...*/}  
    }  
    

    可用using使用命名空间中的变量

    using后面的命名空间成员名必须是有命名空间限制的名字

    例:

    using Mine::a;
    

    这样每次使用Mine中的成员时都必须加上using Mine::变量名,
    如果Mine中的成员较多则可以直接

    using namespace 命名空间名
    

    声明了在本作用域中要用到命名空间中的成员,在使用该命名空间内的任何成员时都不必使用命名空间限定。

    2. 无名命名空间

    但是有时我们并不希望名字Mine被局部的环境之外知道,此时名字Mine似乎多余了,因此我们可以省去这个Mine名字 直接改写为:

    namespace   
    {  
        int a;  
        void f(){/*...*/}  
        int g() {/*...*/}  
    }  
    

    完整:

    #include<iostream>
    using namespace std;
    
    namespace
    {
        int a;
        void f(){cout<<"a";}
        int g() {return 1;}
    }
    
    int main()
    {
        f();cout<<endl;
        cout<<g()<<endl;
    }
    
    /*
    a
    1
    */
    
    

    定义无名命名空间后,外部即不能得知无名命名空间的成员名字,即不让外部知道我的成员名字及其调用
    由于没有名字,所以其它文件无法引用,它只能在本文件的作用域内有效,
    它的作用域:重无名命名空间声明开始到本文件结束。在本文件使用无名命名空间成员时不必用命名空间限定。其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其它文件引用。
    note:

    • 无名命名空间允许无限定的使用其成员函数,并且为它提供了内部连接(只有在定义的文件内可以使用
    • 命名空间不需要命名,它的成员不需要限定就可以使用。
    • 如果在一个文件中包含了两个相同成员的无名命名空间,其含义是不明确的,会导致重复定义的错误。
    • 无名命名空间可以替代全局作用域的static数据成员
  • 相关阅读:
    C语言实现mq收发数据的函数
    4G通信模块在ARM平台下的应用
    4G 通信模块在ARM 平台下的应用
    修改web前端访问端口
    从零开始用 Flask 搭建一个网站(一)
    Python实现Windows定时关机
    前端和后端的数据交互(jquery ajax+python flask+mysql)
    python开源项目及示例代码
    Django读取Mysql数据并显示在前端
    C++关于string的一些用法
  • 原文地址:https://www.cnblogs.com/zhaobinyouth/p/9476670.html
Copyright © 2011-2022 走看看