7

这是来自<iostream>

namespace std 
{
  extern istream cin;       ///< Linked to standard input
  extern ostream cout;  
...

似乎通过使用extern其他命名空间中定义的数据类型将可用?

4

5 回答 5

9

extern表示“这些变量是在其他一些编译单元(.cpp 或 .lib 文件)中定义的”

在这种情况下,你#include <iostream>进入你的 .cpp 文件,并且因为cincout被声明为extern,编译器会让你毫无怨言地使用它们。然后,当链接器运行时,它会查找所有extern变量并对其进行排序。

于 2010-03-25T04:44:53.010 回答
7

extern用于引用在不同编译单元中定义的变量(现在,您可以将编译单元视为 .cpp 文件)。您的示例中的语句声明而不是定义 cinand cout。它告诉编译器这些对象的定义是在另一个编译单元中找到的(它们没有被声明为extern)。

于 2010-03-25T04:45:29.807 回答
2

不,这是一种明确的说法cin,并且cout在没有实际定义它们的情况下被声明。

于 2010-03-25T04:44:23.837 回答
0

extern关键字告诉编译器一个变量是在另一个源中声明的(即在当前范围之外)。链接器然后找到这个实际声明并设置extern变量以指向正确的位置。

extern语句声明的变量不会为它们分配任何空间,因为它们应该在别处正确定义。如果一个变量被声明为extern,并且链接器没有发现它的实际声明,它将显示错误。

例如。外部国际我;

//这声明有一个名为 i 的 int 类型的变量,定义在程序的某处。

于 2018-08-19T03:48:06.107 回答
0

一些答案在这里说 extern 意味着该变量是在其他编译单元中定义的。然后,以下不应该编译,因为没有其他编译单元或文件提供给编译器。

extern int a;
int main(){
    std::cout<<a<<std::endl;    //Prints 3
}
int a=3;

因此,我认为 extern 被明确用于分隔声明和定义,以防出现变量,如答案之一所述。我认为在功能的情况下它是无用的。

于 2020-05-21T11:12:27.750 回答