1

可能重复:
系统如何识别不同函数中的同名静态变量?

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

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

            // work with sameName

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

            // work with sameName
        }
};
4

2 回答 2

4

它与范围有关。

sameName 存在于两个不同的作用域中/在这种情况下是两个函数作用域

所以在内部,变量可能被称为 fun.sameName 和 moreFun.sameName (名称只是我发明的任意名称,但显示了原理)。

于 2012-05-30T12:47:42.133 回答
2

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

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

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

在您的情况下,变量static bool sameName属于 function 的范围fun。而另一个变量static bool sameName则属于函数的作用域moreFun。这两个静态变量属于不同的范围。static关键字只影响持续时间,而不是影响范围。

于 2012-05-30T13:14:56.847 回答