2017-02-14 240 views
-6

我在谷歌搜索了這個問題。我在stackoverflow.comquora.com中發現了一些相關問題,但我仍然不清楚這兩個主題。大家都說我們使用#include<iostream>進行輸入/輸出操作。現在,我們使用cin進行輸入並使用cout打印輸出,這意味着這兩個應該在#include<iostream>中定義。但是,如果不使用using namespace std,我們仍然不能接受任何輸入,也不能在控制檯上打印某些內容。所以,我的問題是 -爲什麼我們在使用「using namespace std」時要使用「#include <iostream>」?

  1. cincout哪裏在實際聲明和定義?是在#include<iostream>還是在namespace std
  2. 如果在#include<iostream>爲什麼我們應該使用using namespace std
  3. 如果在namespace std爲什麼我們應該使用#include<iostream

閱讀在網絡上的一些文章,並在YouTube上觀看一些視頻後,我假設coutcinnamespace std定義和namespace std不作任何單獨的意義,因爲它是在#include<iostream>定義。這就是爲什麼我們需要使用它們。 (只是我的想法讓我知道,如果我是對的或不)。

這個問題的目的是要明確這兩個事實。如果你能幫上忙,那就太好了。

+3

[不使用'使用命名空間std;']可用的功能/類的編譯器(http://stackoverflow.com/questions/1452721/why-是 - 使用名稱空間 - 標準認爲 - 壞 - 練習) – NathanOliver

+0

1.兩者,2.你不應該,3.因爲那是'std :: cout'和'std :: cin'來自哪裏。 – nwp

+3

但是不使用'使用命名空間std'我們仍然不能接受任何輸入,也不能在控制檯上打印某些東西。**錯誤**。改爲使用'std :: cin' /'std :: cout'。 –

回答

1

爲什麼要使用#include <iostream>

爲了使標準庫中的I/O功能集成到我們的節目。

雖然我們正在使用using namespace std

這使我們能夠使用該功能,無需每次我們做一次寫std::

這與上一步無關。只寫using namespace std不會將I/O功能引入到您的程序中,而僅編寫#include <iostream>不允許我們在完全不寫入其組件名稱(包括前綴std::)的情況下使用該功能。

  • #include指令決定我們可以使用什麼;
  • using namespace聲明決定了我們如何使用它。

完美的罰款:

#include <iostream> 

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

同樣有效:

#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << "Hello world!\n"; 
} 

無效:

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

而且也不是這樣的:

using namespace std; 

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

或本:

using namespace std; 

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

我始終認爲你錯誤地理解了'using namespace std'的含義。 –

+0

好吧,我知道我們使用'namespace std'來減少我們的輸入,每次我們在寫'cout'或'cin'之前,每次都會添加'std ::'。我也知道我們使用'namespace'來避免命名衝突。我只是想知道'namespace'和'header file'之間的關係,爲什麼我們需要它們。 –

+0

@RubelHosen:那麼如果你知道'using namespace std'是什麼,那麼我不能理解爲什麼你認爲'#include'是相關的。 –

2

cincout在報頭iostream和命名空間std中定義。這些概念是正交的。 iostream是文件名,std是該文件的源代碼使用的名稱空間。

作爲一種保持組織的方式,C++提供了命名空間。所有的標準庫都在名爲std的名稱空間中定義。您可能編寫或包含的其他庫可能使用它們自己的名稱空間。例如,你可能在你的項目中包含一個物理庫,它想要定義代數向量的概念。通過使用它自己的命名空間(我們稱爲如果physlib),它可以分化之間是vectorphyslib::vector)和標準vectorstd::vector)。命名空間也可以嵌套以幫助組織大型項目。例如,標準庫的計時部分在std::chrono和文件系統的相關組件在std::filesystem

使用cincout的優選方式如下。 :

#include <iostream> 

int main() 
{ 
    std::cout << "Hello, World!\n"; 
    return 0; 
} 

聲明using namespace std僅僅是默認的命名空間std看的指令。它允許您省略使用標準庫組件的std::部分。它通常被認爲是a bad idea使用using namespace std

1
  1. cincout實際上聲明和定義?是在#include<iostream>還是在namespace std

這不是。在namespace std內的iostream頭文件中聲明cincout

  • 如果#include< iostream>我們爲什麼要使用using namespace std
  • 你不應該。要麼完全限定全局變量,如std::cinstd::cout。有很多原因,爲什麼你不應該使用using namespace std;(至少在頭文件中)。

  • 如果namespace std我們爲什麼要使用#include<iostream>?
  • 因爲你需要的聲明編譯代碼。

    1

    #include <iostrem>告訴編譯器拉入標題iostream的內容。該標題除其他內容外還提供對象std::cinstd::cout的聲明。所以基本的「Hello,World」程序是這樣的:

    #include <iostream> 
    int main() { 
        std::cout << "Hello, world\n"; 
        return 0; 
    } 
    

    同樣,如果你想使用std::vector,你這事告訴編譯器#include <vector>。標準庫的其餘部分也是如此:無論您想要使用哪種標識庫,都可以找出哪個標頭聲明瞭該標頭,並且標頭也是#include

    using namespace std;沒有爲您定義任何名稱。它告訴編譯器假定名稱空間std中定義的任何名稱也在using namespace std;發生的作用域中定義。所以這意味着你可以編寫cout而不是編寫std::cout,編譯器會發現你的意思是std::cout。當然,除非你自己寫了一個名字cout(或std中的任何其他名稱,並且在標題中聲明瞭你已經有#include d),在這種情況下,使用聲明會使用名稱不明確。沒有理由寫using namespace std;。只需使用正確的名稱:std::cout清晰明確。

    0

    iostream是標準庫的一部分,這裏是「iostream.h」文件會是什麼樣子,如果你要實現它自己:

    namespace std{ 
    // code about cin 
        extern ostream cin; 
    // code about cout 
        extern ostream cout; 
    } 
    

    (見c++ STL cout source code

    哪裏cincout實際聲明和定義?是在#include <iostream>還是在namespace std

    所以cin/cout聲明和下 namespace std標準庫定義。這意味着,如果你想在你的代碼中使用它,你可以這樣做:

    void main() 
    { 
        std::cout << "Hello"; 
    
    } 
    

    如果#include<iostream>我們爲什麼要使用using namespace std

    你不需要using namespace std,你可以調用std::cout隨處可見,而不是COUT,但你可以看到這是如何使你的代碼冗長和惱人的輸入。 using namespace std你的整個文件實際上是不鼓勵,因爲它可能會產生意想不到的效果,通常在需要的地方,你可以只使用

    using std::cout; 
    using std::cin; 
    

    在需要使用的原因(或需要明確地寫std:cout,是想像你有下面的代碼:

    #include <iostream> 
    namespace mycoolnamespace 
    { 
        class foo { 
        public: 
        foo& operator<< (const std::string& echo) 
        { 
         // do stuff 
        } 
        }; 
    
    
        foo cout; // created a variable called cout 
    } 
    
    void main() 
    { 
        cout << "Hello"; 
    // ^^^^ compiler can't know if you meant to use std::cout or mycoolnamespace::cout here! 
    
        // Potential fix: 
        std::cout << "Hello" 
    
    } 
    

    如果namespace std我們爲什麼要使用#include<iostream>

    默認情況下,程序中並不包含所有來自標準庫的函數/類,否則一個簡單的「Hello world」程序會給編譯器帶來很多工作,因爲它需要解析所有的existi整個標準庫中的類/函數。 #include<iostream>告訴你需要在標準庫的iostream「文件」

    相關問題