这来自<iostream>
:
namespace std
{
extern istream cin; ///< Linked to standard input
extern ostream cout;
...
似乎通过使用extern
,其他命名空间中定义的数据类型才可用?
答案 0 :(得分:8)
extern
表示“这些变量是在其他编译单元(.cpp或.lib文件)中定义的”
在这种情况下,您将#include <iostream>
放入.cpp文件中,并且因为cin
和cout
被声明为extern
,编译器会让您使用它们而不会抱怨。然后,当链接器运行时,它会查找所有extern
变量并将其全部排序。
答案 1 :(得分:4)
extern
用于指代在不同编译单元中定义的变量(现在,您可以将编译单元视为.cpp文件)。示例中的语句声明而不是定义 cin
和cout
。它告诉编译器这些对象的定义可以在另一个编译单元中找到(它们不声明为extern
)。
答案 2 :(得分:2)
不,这是一种明确的方式,可以声明cin
和cout
,而无需实际定义它们。
答案 3 :(得分:0)
extern 关键字告诉编译器在另一个源中(即,在当前作用域之外)声明了一个变量。然后,链接器找到该实际声明,并设置 extern 变量以指向正确的位置。
由 extern 语句声明的变量不会为其分配任何空间,因为应该在其他地方正确定义它们。如果将变量声明为 extern ,并且链接程序未找到该变量的实际声明,则它将显示错误。
例如。 extern int i;
// this声明在程序的某个位置定义了一个名为i的int类型的变量。
答案 4 :(得分:0)
这里有些答案说extern表示变量是在其他编译单元中定义的。然后,不应编译以下内容,因为没有其他编译单元或文件提供给编译器。
extern int a;
int main(){
std::cout<<a<<std::endl; //Prints 3
}
int a=3;
因此,我认为在答案之一中所述的变量情况下,extern明确用于分隔声明和定义。我认为对于函数来说这是没有用的。