在C ++中,std :: cin对象在哪里定义?

时间:2013-09-10 06:15:24

标签: c++ iostream

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

4 个答案:

答案 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类型对象。 它具有外部链接和静态持续时间。

标准输入流是由环境确定的字符源。通常假设它是从外部来源输入的,例如keyboardfile

作为类istream的对象,可以使用提取运算符(operator>>)将格式检索为格式化数据,也可以使用read等成员函数检索无格式数据。 / p>