9

在 C++ 中,istream 对象std::cin在 header 中声明<iostream>,但它在哪里定义?

4

4 回答 4

11

如果标准没有规定它的定义,则完全取决于实施。

这是我的位置:

$ nm -C /usr/local/lib64/libstdc++.so.6 | grep -w cin
0000000000305900 B std::cin
于 2013-09-10T06:19:36.010 回答
3

您正在使用的实现以某种形式提供它们。具体到哪里它们在运行时是实现定义的,但对它们的访问是标准定义的。它们的寿命和行为同样由标准定义:

C++11 § 27.4.1(2)

在第一次构造 ios_base::Init 类的对象之前或期间,以及在任何情况下,在main开始执行的主体之前,构造对象并建立关联。294程序执行期间对象未销毁。295包含<iostream>在翻译单元中的结果应如同定义为具有静态存储持续时间<iostream>的实例一样。ios_base::Init类似地,整个程序应该表现得好像至少有一个ios_base::Init具有静态存储持续时间的实例。

于 2013-09-10T06:25:09.313 回答
1

它是类的对象istream。因此,当您使用时,cin您只需创建一个istream类型对象。它具有外部联系和静态持续时间。

标准输入流是由环境决定的字符源。通常假定它是从外部源输入的,例如 thekeyboard或 a file

作为 class 的对象istream,字符可以使用提取运算符 ( operator>>) 作为格式化数据检索,也可以使用成员函数(如read.

于 2013-09-10T06:32:08.710 回答
1

在由编译器驱动程序(例如g++clang++)自动链接到您的可执行文件的库中。

于 2013-09-10T06:18:04.597 回答