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

In C++, where is std::cin object defined?

本文关键字:cin 对象 定义 在哪里 std C++      更新时间:2023-10-16

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

定义它的地方不是标准规定的,它完全取决于实现。

这是我所在的地方:

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

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

C++11 § 27.4.1(2)

在构造类 ios_base::Init 的对象之前或期间的某个时间构造对象和关联,并且在任何情况下都main主体开始执行之前。294 在程序執行期間,物件不會被摧毀。295 在翻译单元中包括<iostream>的结果应<iostream>定义一个具有静态存储持续时间的ios_base::Init实例。同样,整个程序的行为就好像至少有一个具有静态存储持续时间的ios_base::Init实例一样。

在编译器

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

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

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

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