?
一個中大型軟件往往由多名程序員共同開發,會使用大量的變量和函數,當有兩個人都同時定義了一個名字相同的全局變量或函數的時候,若是把他們的代碼整合在一塊編譯,此時編譯器就會提示變量或函數重復定義,C++為了解決這個問題,便引用了命名空間(namespace)的概念。
一.語法格式
namespace 是C++中的關鍵字,用來定義一個命名空間,語法格式為:
namespace name{//variables, functions, classes }
name
是命名空間的名字,它里面可以包含變量、函數、類、typedef、#define 等,最后由{ }
包圍。
注意:也可以不用寫name,若定義了一個沒有名字的命名空間,則其內部的代碼只能在這個文件里面用。
namespace {int myAge = 0; }
二.使用方法
若要使用命名空間中定義的變量或函數,需要指名它們所在的命名空間,如:
#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++中用來指明要使用的命名空間。
還可以這樣寫(直接使用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,則仍然需要顯示聲明。
還可以寫成這樣:
#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; }
?