2013-10-27 53 views
2

最近C++中的using namespace std;是什麼?什麼是'using namespace std;`,爲什麼我需要它用最近的C++編譯器編譯程序?

在舊的編譯器如Turbo C++中,這似乎是不受支持的,因爲它會導致編譯器錯誤。在最近的C++編譯器中,這是編譯和運行程序的唯一方法。

+2

它是[是應該避免的是(http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice)。 – juanchopanza

+6

你最近稱之爲「近」的是15歲,而你所說的「老」是真正古老而且最好被遺忘的 –

+1

請在將來使用更多的描述性標題,如果可能的話花更多時間寫它來糾正簡單的錯誤和錯別字。 – user2802841

回答

3

C++使用「名稱空間」對相關的類和函數進行分組。 C++標準庫幾乎完全在稱爲std(簡稱「標準」)的名稱空間內定義。當你#include一個標準的頭如<string>它包含了這樣的定義:

namespace std 
{ 
    template<typename T> 
    class allocator; 

    template<typename Ch> 
    class char_traits 
    { 
     // ... 
    }; 

    template<typename Ch, typename Traits = char_traits<Ch>, typename Alloc = allcoator<Ch>> 
    class basic_string 
    { 
     // ... 
    }; 

    typedef basic_string<char, char_traits<char>, allocator<char> > string; 
} 

名稱allocatorchar_traitsbasic_stringstring在命名空間std所有聲明的,因此包括報頭之後,你需要把它們稱爲std::string

或者,你可以使用一個使用指示符using namespace std這使得從命名空間std當前範圍內所有可用的名字,所以遵循使用指令,您可以僅說string而不是std::string

古TURBOC++編譯器不遵循標準的,所以它的標準庫只是把名稱在全局命名空間,所以你必須參考stringstd::string,你不能使用using指令。第一個C++標準於1998年發佈,所以你不應該在2013年使用預標準編譯器,它不會是一種有價值的教育。

4

Turbo C++是一個20多年曆史的編譯器。你不應該使用它。

這就是說,

#include <iostream> 
using namespace std; 
在現代編譯器

相同寫入的Turbo C以下的標準頭。

#include <iostream.h> 

Turbo C++是預命名空間。所以所有的標準頭文件都不在namespace std。所以你不需要使用namespace std

Turbo C++中不會需要using namespace std,因爲它不支持命名空間。 Turbo C++不支持大概50%的C++的東西 - 這是古老的。使用Visual C++(Express版本是免費的)或G ++ for C++。

+0

非常感謝@ user93353,但在我們的大學教職員工說Turbo是最好的基礎編譯..沒關係,但在互聯網上搜索程序,我只得到新的..這些程序不工作在Turbo C++。什麼是備用? –

+4

請參閱http://isocpp.org/get-started瞭解一些免費提供的現代編譯器 –

+3

您需要找到一所新的大學。你顯然不會被教導真正的C++。 –

2

using namespace std;告訴編譯器,您不關心標準庫中精心設計的std的用法,但寧可自己處理不可預知的,有時甚至是災難性的名稱衝突。

請勿使用它。它是從來沒有必要,即使有些IDE自動插入它。如果您有其中之一,請在發生時刪除聲明。

要使用標準庫中的名稱,請使用std::。就像這樣:

#include <iostream> 

int main() { 
    std::cout << "Hello, world\n"; 
} 
+0

「,即使有些IDE自動插入它。」 - 哪些IDE會是? –

+0

@FrankOsterfeld我已經看到Eclipse做到了。 ideone.com也是如此。 – juanchopanza

+0

@FrankOsterfeld - 我不知道;有幾次,當我建議不使用它,我得到了一個答覆,它會自動插入。 –

相關問題