“::'变量'”指的是什么?

时间:2011-08-15 13:43:07

标签: c++ scope

在下面的程序中我的意思是什么?

#include<iostream>
using namespace std;
int i = 10;
int main(){
   int i = 20;
   {
   int i = 30;
   cout << i << ::i <<endl;
   }
}

输出“3010”。 “:: i”似乎指的是全球宣言。它究竟意味着什么?

8 个答案:

答案 0 :(得分:9)

它被称为合格名称查找。
它引用了在全局范围内声明的变量i 简单来说,这意味着不要引用局部变量i(如果有的话),而是引用全局范围内的i

每当在本地范围内有相同的命名变量时,在引用变量名时,首选项将赋予本地范围中的变量。这意味着在您的程序中,本地范围内的i { }会隐藏名为i的所有其他变量,即i=20以及i=10 {1}})。因此,要引用全局范围内的i,请使用::范围解析运算符。=

答案 1 :(得分:4)

::运算符开头的变量和函数描述了此变量或函数位于全局命名空间(非本地)中。在您的示例中,i表示在第7行定义的局部变量,::i表示在第3行定义的全局变量。但是i没有引用在第5行定义的外部局部变量,因为它在该范围内被重新定义并且不可访问(第6行到第9行)。

答案 2 :(得分:3)

::运算符是scope resolution operator。当您编写scopename::name时,意味着您将对象/函数/ ...命名为name到范围scopename(通常是命名空间);例如,如果你没有写using namespace std;来使用cin / cout / ......你就必须写std::cin / std::cout / ...

如果范围解析运算符前面没有范围名称,则意味着您明确引用放入全局命名空间的对象,因为全局i在您的程序中。

如果您当前导入了多个名称空间(使用using namespace指令)或具有隐藏全局名称的本地名称,则此功能特别有用。在您的代码中,确实会发生以下情况:本地i“隐藏”全局版本,您需要::才能访问全局i

随机提示:当您处理C库(没有命名空间概念)并且您想成为C库时,您经常会看到::用于引用全局标识符确定你正在调用一个特定的C函数而不是一些将它隐藏到当前作用域的C ++方法(这在想要调用Windows API的MFC代码中发生了很多)。

答案 3 :(得分:0)

i在全局命名空间。

{
  int i = 30;
  cout << i << ::i <<endl;

  // 1. First i refers to the block scoped i having value 30
  // 2. ::i refers to the global variable i having the value 10
}

答案 4 :(得分:0)

::i指的是全局命名空间中的i

答案 5 :(得分:0)

它只是一个范围运营商。它通常用于名称空间。

答案 6 :(得分:0)

::i指的是全局变量。

::用于全局命名空间。所以::i表示在全局命名空间声明的变量i

答案 7 :(得分:0)

::i表示搜索未嵌套在任何内容中的i。在您的情况下,这将引用i=10; see c/c++ search wildcard and syntax