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 ファイルと考えることができます)。あなたの例のステートメントは、定義するのではなく宣言し、. これらのオブジェクトの定義が別のコンパイル単位で見つかったことをコンパイラに伝えています (ここでは、として宣言されていません)。 cincoutextern

于 2010-03-25T04:45:29.807 に答える
2

いいえ、これは明示的な言い方であり、cin実際coutに定義せずに宣言されています。

于 2010-03-25T04:44:23.837 に答える
0

externキーワードは、変数が別のソース (つまり、現在のスコープ外) で宣言されていることをコンパイラに伝えます。次に、リンカーはこの実際の宣言を見つけて、正しい場所を指すようにextern変数を設定します。

externステートメントで宣言された変数には、他の場所で適切に定義する必要があるため、それらに割り当てられるスペースはありません。変数がexternと宣言されていて、リンカーがその実際の宣言を検出しない場合、エラーが表示されます。

例えば。extern int i;

//これは、プログラム内のどこかで定義された int 型の i という名前の変数があることを宣言します。

于 2018-08-19T03:48:06.107 に答える