在 C++ 中,istream 对象std::cin
在 header 中声明<iostream>
,但它在哪里定义?
问问题
1021 次
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 回答