静态成员函数中的静态变量的名称相同

时间:2012-05-30 12:43:27

标签: c++ static

  

可能重复:
  How are static variables with the same name in different functions identified by the System?

编译器如何区分具有相同名称但在两个不同(静态)成员函数中定义的两个本地静态变量?

class Type
{
    public:
        static void fun()
        {
            static bool sameName = false;

            // work with sameName

        }
        static void moreFun()
        {
            static bool sameName = false;

            // work with sameName
        }
};

2 个答案:

答案 0 :(得分:4)

它与范围有关。

sameName存在于两个不同的范围中/在这种情况下是两个函数范围

所以内部变量可能用名称fun.sameName和moreFun.sameName引用(名称只是由我发明的arbtitrary,但显示原理)。

答案 1 :(得分:2)

在C ++ SPEC(例如:N3337)中说:

  

3关键字static可用于声明具有静态存储duraion的局部变量。

     

(第62页;第3.7.1节静态存储持续时间)

在您的情况下,变量static bool sameName属于函数fun的范围。另一个变量static bool sameName属于函数moreFun的范围。这两个静态变量属于不同的范围。 static关键字效果仅限于持续时间,而不是效果范围。