【问题标题】:In C++, where is std::cin object defined?在 C++ 中,std::cin 对象在哪里定义?
【发布时间】:2013-09-13 17:55:24
【问题描述】:

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

【问题讨论】:

标签: c++ iostream


【解决方案1】:

标准没有强制规定的地方,完全取决于实施。

这是我的位置:

$ nm -C /usr/local/lib64/libstdc++.so.6 | grep -w cin
0000000000305900 B std::cin

【讨论】:

    【解决方案2】:

    您正在使用的实现以某种形式提供它们。关于它们在运行时的where 的细节是实现定义的,但访问 to 它们是标准定义的。它们的生命周期和行为同样由标准定义:

    C++11 § 27.4.1(2)

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2016-10-16
          • 1970-01-01
          • 2011-04-05
          • 1970-01-01
          • 2011-08-14
          • 1970-01-01
          • 2016-03-07
          • 2010-10-22
          • 1970-01-01
          相关资源
          最近更新 更多