C++語言基礎(1)-命名空間

 

一箇中大型軟件每每由多名程序員共同開發,會使用大量的變量和函數,當有兩我的都同時定義了一個名字相同的全局變量或函數的時候,如果把他們的代碼整合在一塊編譯,此時編譯器就會提示變量或函數重複定義,C++爲了解決這個問題,便引用了命名空間(namespace)的概念。ios

一.語法格式

namespace 是C++中的關鍵字,用來定義一個命名空間,語法格式爲:程序員

namespace name{
    //variables, functions, classes
}

name是命名空間的名字,它裏面能夠包含變量、函數、類、typedef、#define 等,最後由{ }包圍。函數

注意:也能夠不用寫name,若定義了一個沒有名字的命名空間,則其內部的代碼只能在這個文件裏面用。spa

namespace {

    int myAge = 0;
}

二.使用方法

若要使用命名空間中定義的變量或函數,須要指名它們所在的命名空間,如:code

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
    int myAge = 0;
}


int main()
{
    DJ::myAge = 5;
    cout << "my age is: "<< DJ::myAge << endl;
    return 0;
}

::是一個新符號,稱爲域解析操做符,在C++中用來指明要使用的命名空間。blog

還能夠這樣寫(直接使用using聲明):開發

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
    int myAge = 0;
}


int main()
{
    using DJ::myAge;
    myAge = 5;
    cout << "my age is: "<< myAge << endl;
    return 0;
}

在代碼的開頭使用using聲明DJ:myAge,這樣若是接下來的代碼中出現了未指明命名空間的myAge,就使用DJ:myAge,不過要使用別的命名空間中定義的myAge,則仍然須要顯示聲明。編譯器

還能夠寫成這樣:io

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
    int myAge = 0;
}


int main()
{
    using namespace DJ;
    myAge = 5;
    cout << "my age is: "<< myAge << endl;
    return 0;
}

若是命名空間 DJ中定義的其餘的變量,樣具備 myAge變量的效果。編譯

命名空間內部不只能夠聲明或定義變量,對於其它能在命名空間之外聲明或定義的名稱,一樣也都能在命名空間內部進行聲明或定義,例如類、函數、typedef、#define 等均可以出如今命名空間中。

三.std命名空間

新建一個純C++項目(QT)時,QT默認新建的main.cpp文件以下:

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

實際上是省略了cout的命名空間,也能夠寫成這樣:

#include <iostream>

int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
相關文章
相關標籤/搜索