0

私は C 作業環境から来ましたが、C++ は初めてです。次の宣言にご協力ください。

いくつかの関数 foo() 内で、このコードを見つけました。

::ifstream ifObj;

入力ファイルストリームオブジェクトを宣言していることは知っています。

::しかし、ここでのスコープ解決の概念は完全にはわかりません。これは何で、なぜオブジェクトの宣言で使用されるのですか。

どこにもわからなかったので、尋ねました。

4

2 に答える 2

2

具体的には、あなたの質問のために、

型 ifstream の起源をたどりながら、コンパイラーが曖昧さを解決できるようにするためです。

ifstream は、さまざまな意味を提供するために、boost などのサードパーティ ライブラリで宣言できます。

あなたが持っていると考えてください、

namespace boost {
 typedef int ifstream;
}

using namespace boost;

//but here you want global ifsteam, not from boost, so
::ifstream ifObj; // Here you are creating a object for global ifstream, not for boost's ifstream,
于 2013-09-11T12:55:59.207 に答える
1

単項スコープ解決演算子は、トークンがローカル名前空間でオーバーライドされる場合に、トークンのグローバル名前空間バージョンを参照するために使用されます。

例:

int count = 0;

int main(void) {
  int count = 0;
  ::count = 1;  // set global count to 1
  count = 2;    // set local count to 2
  return 0;
}
于 2013-09-11T12:55:41.223 に答える