2015-10-27 80 views
1

首先,我無法理解C++標準庫或std的結構。例如,「你好,世界!」 PROGRAMM看起來是這樣的:當我應該使用我自己的命名空間?

生成隨機數和執行時間assesment
#include <iostream> 

int main() { 
    std::cout << "Hello, world!" << std::endl; 
} 

更復雜的程序是這樣的:

#include <iostream> 
#include <random> 
#include <chrono> 
#include <time.h> 

int main() { 
    std::chrono::time_point<std::chrono::system_clock> start, end; 
    std::tr1::default_random_engine eng(static_cast<unsigned int>(time(NULL))); 
    std::tr1::uniform_int<int> unif(0, 99); 

    start = std::chrono::system_clock::now(); 

    for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 10; j++) { 
      std::cout << unif(eng) << " "; 
     } 

     std::cout << std::endl; 
    } 

    end = std::chrono::system_clock::now(); 

    int elapsed_milliseconds = std::chrono::duration_cast<std::chrono::milliseconds> (end - start).count(); 

    std::cout << "Elapsed time: " << elapsed_milliseconds << "ms" << std::endl; 

    std::cin.get(); 
    return 0; 
} 

通過我看來這樣的代碼:

std::tr1::uniform_int<int> unif(0, 99); 

或本:

std::chrono::time_point<std::chrono::system_clock> start, end; 

看起來非常難看。當然,我可以用這樣的:

using namespace std; 
using namespace std::tr1; 
using namespace std::chrono; 

但這個代碼可能會導致一些問題:Why is "using namespace std" considered bad practice?

我無法理解在standrad庫創建嵌套的命名空間的原因。這只是與名稱功能衝突相關的一個原因嗎?或者是其他東西?

對於我自己的項目,我應該使用自己的命名空間嗎?

+0

如果使用C++ 11,則不需要'std :: tr1',因爲[TR1](https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1)已合併。 – rici

+0

@rici是的,它沒有'std :: tr1'。我以前不知道這一點。 –

回答

1

命名空間是一個邏輯組。沒有任何規則可以使用命名空間。您可以使用或不使用命名空間。但這是關於組織你的代碼,庫或API的。通過「Herb Sutter」閱讀此部分最佳實踐http://www.gotw.ca/publications/mill08.htm

此外,您可以使用using namespace std;作爲開放命名空間。沒有任何規則說不能。但是所有這些都是爲了讓下一位程序員將良好的實踐編寫成簡單易懂並且易於維護的程序。

您可以爲您的程序使用一個或多個命名空間,特別是如果您正在創建將在公共之間分發的API或庫。

而且它有助於保持模塊在大型程序中分離。並允許程序員在不依賴的情況下工作。

認爲谷歌有兩個UI團隊爲W​​eb和mobiles.They可以使用不同的命名空間爲他們的代碼模塊

Google:Web:UIGoogle:Mobile:UI

他們甚至可以進一步延伸

Google:Web:UI:controlsGoogle:Mobile:UI:controls

或者他們可以使用

Google:controls:Web:UIGoogle:controls:Mobile:UI

那是他們的願望,安慰和他們如何思考組織的好方法。但是可以有更好的方法。

與STDLIB同樣的故事。開發人員創建名稱空間結構來組織模塊。但它可能不是完美的方式。但你必須使用它。 如果你不喜歡,你可以別名http://en.cppreference.com/w/cpp/language/namespace_alias

如果你要創建你的程序。閱讀其他人如何使用。特別流行的C++項目,如Linuxboost etc ..下載代碼並看看。如果你的程序非常簡單,你可能不需要太在意。但總是閱讀並保持良好的習慣(閱讀本書以獲取更多信息)。 http://www.gotw.ca/publications/c++cs.htm

相關問題