类型名称路径由静态变量隐藏

时间:2015-02-10 21:47:55

标签: c++

我有以下代码:

struct type1
{
    struct type2
    {

    };
    int tyep2; // No conflic with real type name path: type1::type2
};

struct type4
{
    struct type5
    {

    };
    static int type5; // No conflic with real type name path: type4::type5

};

int type4::type5;  // this path name is equal to type name path: struct type4::type5  


int _tmain(int argc, _TCHAR* argv[])
{
    type1::type2 var1; // is ok
    type4::type5 Var2; // is ok
    type4::type5 = 0; // is ok, but the static variable has obscured my type 
    return 0;
}

我的问题是:

  1. 为什么静态变量 type5 会隐藏该类型 的 TYPE4 ::成的Type5
  2. 当我声明 type5 变量时,为什么编译器不会生成错误?
  3. 我可以在C ++标准规范中阅读有关此行为的内容吗?请最后发布摘录

2 个答案:

答案 0 :(得分:2)

由于名称含糊不清,你的程序格式不正确(忽略你散落的拼写错误的“tyep”)

  

§10.2会员名称查询

     

成员名称查找确定类范围(3.3.7)中名称(id-expression)的含义。名称   查找可能导致歧义,在这种情况下程序是不正确的。对于id-expression,名称   查询从此类的范围开始;对于qualified-id,名称查找从嵌套名称的范围开始 -   符。名称查找在访问控制之前进行(3.4,第11条)。

不要这样做:

struct type5
{
   //...
};
static int type5;

不出所料,这不会为我在ideone上编译。 Live Demo

答案 1 :(得分:0)

1)t YE p5!= type5

2)同样的原因