Hii,
我对编程C ++比较陌生。我知道函数cout,cin等...在标准名称空间中定义。但我们还包括用于运行程序的iostream头文件。
所以,就像是
namespace std
{
declaration of cout
declaration of cin
..... some other declarations etc....
}
并且在istream和ostream中的实际实现...... ????
或者,是否反过来...... ???喜欢....
namespace std
{
complete definition of cout
complete definition of cin
.........
}
并且他们的签名只是放在iostream文件中,如...
iostream file
{
std :: cout
std :: cin
.....
}
请提供您认为可以帮助我更好理解的任何示例或链接
答案 0 :(得分:4)
我知道cout的功能, cin等......在标准中定义 名称空间。
这些不是真正的函数,而是basic_ostream
和basic_istream
的全局实例。
但是我们还包含用于运行程序的iostream头文件。
您更喜欢包含标题,以便编译源代码(编译器需要声明等)。
问题的其余部分相当模糊。如何实现标准库几乎取决于实现。该标准要求如果包含iostream
,您将获得以下全局变量的声明:
namespace std {
extern istream cin;
extern ostream cout;
extern ostream cerr;
extern ostream clog;
extern wistream wcin;
extern wostream wcout;
extern wostream wcerr;
extern wostream wclog;
}
答案 1 :(得分:2)
标准真的没有说。实现者完全可以将它作为一个只有头的库来实现,但是他们更有可能只将声明放在头文件中并将实现放在CRT中。
编辑:但是,cin
,cout
等的定义需要extern
并在某种库中定义。 (见UncleBens的回答)
答案 2 :(得分:1)
cin
和cout
不是简单变量 - 使用cerr
它们是默认情况下为使用iostream的每个应用程序注册的流。如果不包含该标题,则无法使用它们。
答案 3 :(得分:1)
要使用cin
和cout
,您只需知道它们位于std
命名空间中,并且您需要包含iostream
才能使用它们。< / p>
为了让您了解如何实施,类std::ostream
的定义可能位于ostream
标题iostream
中。同样在标题ostream
中,std::cout
可以定义为对std::ostream
的引用。