2012-04-16 49 views
1
#include <iostream> 

using namespace std; 

int d = 10; 

int main() 
{ 
    int d = 20; 

    { 
     int d = 30; 
     cout << d << endl << ::d; // what does it mean? 
    } 

    return 0; 
} 

输出之前是:“::” 变量名C++

我不明白,为什么 “::d” 给出了10?有人可以向我解释吗?

+1

因为C++团队想要使语言如此复杂和令人困惑,他们将确保他们从现在开始的十年内的极限小时费率,因为他们将是唯一能够在该软件上工作的人(snark snark)。 – 2012-04-16 23:47:01

+0

为什么'\ file.txt'与'\ subdirectory \ file.txt'不一样。 – MSalters 2012-04-17 07:39:16

回答

11

::d意味着d从全局命名空间

编辑:有类似名称的d三个不同的变量。一个是全局命名空间d=10,一个是main函数的内部作用域(20),最后一个是主函数内部块(30)的内部块。

在你有权访问(通过名称)到相应变量的每个块中,总能访问全局名称空间(由::)。

+0

但是有'D = 20',为什么它没有改变它的价值? – iyazici 2012-04-16 23:46:54

+1

@İbrahimYazıcı该代码中有三个范围级别发生。全局范围,main()中的范围和最内部的范围{}。您在该程序中声明了三个单独的变量。没有一个你不断重新分配价值。 – 2012-04-16 23:48:22

+0

@qehgt虽然你是正确的,但如果你详细了解范围规则和那段代码中真正发生的事情,那么可能对遇到这个问题的其他人非常有帮助。 – 2012-04-16 23:49:27