在C ++中,istream对象std::cin
在标题<iostream>
中声明,但它在哪里定义?
答案 0 :(得分:11)
如果定义的内容不是标准规定的,那完全取决于实施。
这是我的地方:
$ nm -C /usr/local/lib64/libstdc++.so.6 | grep -w cin
0000000000305900 B std::cin
答案 1 :(得分:3)
您正在使用的实现以某种形式提供它们。 在运行时的具体细节是实现定义的,但访问到是标准定义的。它们的生命和行为同样由标准定义:
C ++11§27.4.1(2)
构造对象并在第一次构造类ios_base :: Init的对象之前或期间的某个时间建立关联,并且在任何情况下都在
main
的主体开始执行之前建立。 sub> 294 在程序执行期间不会销毁对象。 295 在翻译单元中包含<iostream>
的结果应该好像<iostream>
定义了一个实例ios_base::Init
具有静态存储持续时间。同样,整个程序的行为应该至少有一个具有静态存储持续时间的ios_base::Init
实例。
答案 2 :(得分:1)
在由编译器驱动程序自动链接到您的可执行文件的库中(例如g++
或clang++
)。
答案 3 :(得分:1)
它是类istream
的对象。因此,当您使用cin
时,您只需创建一个istream
类型对象。
它具有外部链接和静态持续时间。
标准输入流是由环境确定的字符源。通常假设它是从外部来源输入的,例如keyboard
或file
。
作为类istream
的对象,可以使用提取运算符(operator>>
)将格式检索为格式化数据,也可以使用read
等成员函数检索无格式数据。 / p>