我在谷歌搜索过这个问题。我在stackoverflow.com
和quora.com
中找到了一些相关问题,但我仍然不清楚这两个主题。每个人都说我们使用#include<iostream>
进行输入/输出操作。现在,我们使用cin
获取输入并使用cout
打印输出,这意味着应在#include<iostream>
中定义这两个。但是如果不使用using namespace std
,我们仍然无法接受任何输入,也无法在控制台上打印。所以,我的问题是 -
cin
和cout
实际声明和定义在哪里?是#include<iostream>
还是namespace std
?#include<iostream>
,我们为什么要使用using namespace std
?namespace std
,我们为什么要使用#include<iostream
?在网上阅读了一些文章并在YouTube上观看了一些视频后,我假设cout
cin
和namespace std
定义了namespace std
而#include<iostream>
没有因为它是在document.getElementById("name").innerHTML = name ;
中定义的,所以没有任何意义。这就是为什么我们需要同时使用它们。 (只是我的想法,如果我是对的,请告诉我。)
这个问题的目的是要明确这两个事实。如果你能提供帮助就会很棒。
答案 0 :(得分:3)
cin
和cout
在标头iostream
和名称空间std
中定义。这些概念是正交的。 iostream
是文件名,std
是该文件源代码使用的命名空间。
作为一种保持组织有序的方式,c ++提供了命名空间。所有标准库都在名为std
的名称空间中定义。您可能编写或包含的其他库可能使用自己的命名空间。例如,您可能在项目中包含一个想要定义代数向量概念的物理库。通过使用它自己的命名空间(让我们调用physlib
),它可以区分vector
(physlib::vector
)和标准vector
(std::vector
)。命名空间也可以嵌套以帮助组织大型项目。例如,标准库的计时部分位于std::chrono
,文件系统相关组件位于std::filesystem
。
使用cin
和cout
的首选方式如下。 :
#include <iostream>
int main()
{
std::cout << "Hello, World!\n";
return 0;
}
语句using namespace std
只是默认情况下查找名称空间std
的指令。它允许您省略使用标准库组件的std::
部分。它通常被视为a bad idea使用using namespace std
。
答案 1 :(得分:2)
我们为什么要使用
(define-syntax-parser infix #:literals [+ *] #:datum-literals [^] [(_ n:number) #'n] [(_ x:id) #'x] [(_ (a:expr (~seq + b:expr) ...+)) #'(+ (infix a) (infix b) ...)] [(_ (a:expr (~seq * b:expr) ...+)) #'(* (infix a) (infix b) ...)] [(_ (a:expr ^ b:expr)) #'(expt (infix a) (infix b))]) (define (f x) (infix (2 * x))) (define (p x) (infix ((3 * (x ^ 2)) + (6 * x) + 5)))
将标准库的I / O功能引入我们的程序。
我们正在使用
#include <iostream>
?
这使我们可以在不用每次写using namespace std
的情况下使用该功能。
这与上一步无关。仅写入std::
不会将I / O功能带入您的程序,只写using namespace std
不允许我们使用该功能没有完整地写出其组件的名称(包括#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";
}
答案 2 :(得分:1)
- 醇>
cin
和cout
实际声明和定义在哪里?是#include<iostream>
还是namespace std
?
不是或。 cin
和cout
在iostream
内的namespace std
标头文件中声明。
- 如果在
醇>#include< iostream>
,我们为什么要使用using namespace std
?
你不应该。完全限定全局变量,例如std::cin
或std::cout
。您不应该使用using namespace std;
(至少在头文件中)的原因有很多。
- 如果在
醇>namespace std
,我们为什么要使用#include<iostream>?
因为您需要声明来编译代码。
答案 3 :(得分:1)
#include <iostrem>
告诉编译器提取标题iostream
的内容。该标题除其他外还提供了对象std::cin
和std::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;
中定义的任何名称。这意味着您可以编写std::cout
而不是编写cout
,编译器会发现您的意思是std::cout
。当然,除非您自己使用名称cout
(或std
中的任何其他名称并在您#include
d的标题中声明的名称)编写了一些内容,其中使用声明的情况使得名称的使用不明确。写using namespace std;
是没有充分理由的。只需使用正确的名称即可:std::cout
清晰且明确。
答案 4 :(得分:0)
namespace std{
// code about cin
extern ostream cin;
// code about cout
extern ostream cout;
}
是标准库的一部分,这里是&#34; iostream.h&#34;如果你自己实现它,文件会是这样的:
cin
实际声明和定义的
cout
和#include <iostream>
在哪里?是namespace std
还是cin
?
因此cout
/ namespace std
被声明并在标准库中定义
void main()
{
std::cout << "Hello";
}
。这意味着如果您想在代码中使用它,您可以这样做:
#include<iostream>
如果在
using namespace std
,我们为什么要使用using namespace std
?
你不需要std::cout
,你可以在任何地方调用using namespace std
而不是cout,但是你可以看到这会让你的代码变得冗长而烦人。
您的整个文件中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>
,我们为什么要使用#include<iostream>
?
默认情况下,并非标准库中的所有函数/类都包含在您的程序中,否则就是一个简单的“Hello Hello&#34;程序会给编译器带来很多工作,因为它需要解析整个标准库中的所有现有类/函数。 iostream
告诉编译器您需要标准库中可用的函数/类whse
&#39;文件&#39;