2017-02-14 238 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“文件”

    相关问题