什么是::声明中,为什么使用它?

时间:2013-09-11 12:51:53

标签: c++ fstream

我来自C工作环境,是C ++的新手。 请在以下声明中提供帮助。

在一些函数foo()里面我找到了这段代码。

::ifstream ifObj;

我知道它正在声明输入文件流对象。

但我完全不知道::范围解析的概念。 这是什么以及为什么它用于声明对象。

无法在任何地方找到,因此问道。

2 个答案:

答案 0 :(得分: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,

答案 1 :(得分:1)

如果在本地命名空间中覆盖该令牌,则使用一元范围解析运算符来引用令牌的全局命名空间版本。

F.ex:

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;
}