2

当我尝试查看 cout 的定义时,我登陆 iostream 文件,它被声明为,

extern _CRTDATA2 ostream cout;

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

4

1 回答 1

1

全局符号在您与应用程序链接的运行时库中定义。例如,在您传递将您的应用程序与库链接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
于 2013-07-21T16:26:04.267 回答