私は C 作業環境から来ましたが、C++ は初めてです。次の宣言にご協力ください。
いくつかの関数 foo() 内で、このコードを見つけました。
::ifstream ifObj;
入力ファイルストリームオブジェクトを宣言していることは知っています。
::
しかし、ここでのスコープ解決の概念は完全にはわかりません。これは何で、なぜオブジェクトの宣言で使用されるのですか。
どこにもわからなかったので、尋ねました。
具体的には、あなたの質問のために、
型 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,
単項スコープ解決演算子は、トークンがローカル名前空間でオーバーライドされる場合に、トークンのグローバル名前空間バージョンを参照するために使用されます。
例:
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;
}