当我尝试查看cout的定义时,我进入了声明为的iostream文件,

extern _CRTDATA2 ostream cout;

那么在哪里定义呢?因为extern只是声明而不是定义。

最佳答案

全局符号在与应用程序链接的运行时库中定义。例如,在gcc中,您传递了编译器选项-lstdc++,该选项会将您的应用程序与libstdc++.a库链接。这就是所有这些符号所在的位置。

但是,这特定于您的编译器/运行时库版本,并且会有所不同。 Microsoft Visual C++的行为可能有所不同,但思路是相同的:这些符号位于C++编译器随附的预编译库中。

使用GNU,您可以输入:

nm -g libstdc++.a

查看库中的符号。输出可能看起来像这样(在许多其他行中):
ios_init.o:
                 U _ZSt3cin
globals_io.o:
0000000000000000 D _ZSt3cin
0000000000000000 D _ZSt4cerr
0000000000000000 D _ZSt4clog
0000000000000000 D _ZSt4cout
0000000000000000 D _ZSt4wcin
0000000000000000 D _ZSt5wcerr
0000000000000000 D _ZSt5wclog
0000000000000000 D _ZSt5wcout

关于c++ - cout在iostream中声明,但是在哪里定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17772732/

10-10 21:21