C ++为什么这不会导致重新清除错误?

时间:2017-10-07 20:46:06

标签: c++ namespaces

#include <iostream>
using namespace std;
namespace extra
{ int i; }//Declared an integer i here
    void i()
    {
       using namespace extra;
       int i; //We called namespace extra at above then we declared another i
       i=9;
       cout<<i;
    }
    int main()
    {

        enum letter{i,j};
        class i{letter j;};
        ::i();

        return 0;
    }

正如我在上面的评论中解释的那样,我们首先在命名空间中声明一个整数i然后在调用它之后我们声明另一个整数然后给它一个值9.我的问题是为什么这不会导致重新整理错误?也在代码行

i=9;

我的值得到值9?命名空间内的一个或void i()函数内的一个?

注意:请原谅我的英语不好。

1 个答案:

答案 0 :(得分:1)

这是当地的。根据经验,它始终是使用的“最接近”定义。

struct A {};
int A = 0;
A b; // not ok, because A is the variable.

没有错误,因为没有名称i表示全局范围或函数中的变量。

using指令只告诉编译器,如果它在当前上下文中找不到合适的名称,它也应该查看该命名空间。在您的情况下,编译器不需要进入extra来查找i,因为它已经在函数i中找到了一个。{/ p>