Это от <iostream>
:
namespace std
{
extern istream cin; ///< Linked to standard input
extern ostream cout;
...
Это кажется при помощи extern
типы данных, определенные в других пространствах имен, просто будут доступны?
extern
используется для ссылки на переменную, определенную в другом модуле компиляции (на данный момент вы можете рассматривать модуль компиляции как .cpp файл). Операторы в вашем примере объявляют , а не определяют cin
и cout
. Он сообщает компилятору, что определение этих объектов находится в другом модуле компиляции (где они не объявлены как extern
).
Нет, это явный способ сказать, что cin
и cout
объявлены без их фактического определения.
extern
означает, что «эти переменные определены в каком-либо другом модуле компиляции (.cpp или. lib) "
В этом случае вы #include
в свой .cpp файл, и поскольку cin
и cout
объявлены как extern
, компилятор позволит вам использовать их без жалоб. Затем, когда компоновщик запускается, он ищет все переменные extern
и сортирует их.