歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的命名空間

C++中的命名空間

日期:2017/3/1 9:06:57   编辑:Linux編程

一,命名空間(namespace)的基本概念以及由來

1.什麼是標識符:

  在C++中,標識符可以是基本的變量,類,對象,結構體,函數,枚舉,宏等。

2.什麼是命名空間:

  所謂的命名空間是指標識符的可見范圍。C++標准庫中的所有的標識符都被定義在一個名為std的命名空間中。

3.C語言的命名空間:

  在C語言中只有一個全局作用域,因此在C語言中所有的標識符共享一個命名空間,因此隨著代碼量的增大,標識符之間可能會重名。由此會造成一些命名問題。

4.針對C語言的問題,在C++中提出了命名空間的概念:

  1.命名空間將全局作用域劃分成不同的的部分。

  2.不同的命名空間中的標識符可以重名而不會發生沖突。

  3.全局作用域也叫做默認命名空間。

  4.命名空間之間可以相互嵌套。

二,命名空間(namespace)的定義以及使用

1.命名空間的定義:

namespace 命名空間名稱
{
    ......
}

2.命名空間的使用:

using namespace name; // 使用name這個命名空間
using namespace name::variable; // 使用name這個命名空間下的variable
std::cout << "Hello,NameSpace" << std::endl; // 直接使用這個命名空間中的標識符
::tmp = 0; // 使用默認命名空間的變量,默認情況下可以直接使用默認命名空間的所有標識符

3.域作用符::

  域作用符用兩個冒號(::)表示,用來訪問命名空間下的標識符。

三,命名空間(namespace)實際案例

# include<iostream>

/* 定義命名空間n1 */
namespace n1
{
    /* 定義學生類 */
    class Student
    {
    public:
        char name[64];
        int    age;
    };
    /* 定義函數 */
    void printN1()
    {
        std::cout << "我是n1命名空間的printN1()" << std::endl;
    }
    /* 定義命名空間n2 */
    namespace n2
    {
        /* 定義變量n */
        int n = 0;
    }
}

// 在默認命名空間下定義變量a
int a = 100;

int main()
{
    // 使用命名空間n1,曝光n1的所有標識符,因此可以調用printN1()函數
    using namespace n1;
    printN1();
    // 使用命名空間n2,曝光n2的所有標識符,因此可以使用變量n
    using namespace n1::n2;
    // 直接使用指定命名空間下的標識符
    std::cout << n << std::endl;
    // 使用域作用符訪問默認命名空間下的標識符
    ::a = -100;
}

Copyright © Linux教程網 All Rights Reserved